revox 0.0.2 → 0.2.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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +96 -0
  3. data/README.md +88 -22
  4. data/lib/revox/client.rb +19 -1
  5. data/lib/revox/internal/transport/base_client.rb +5 -0
  6. data/lib/revox/internal/type/base_model.rb +3 -3
  7. data/lib/revox/internal/util.rb +53 -7
  8. data/lib/revox/models/assistant_create_params.rb +1036 -11
  9. data/lib/revox/models/assistant_create_response.rb +1071 -11
  10. data/lib/revox/models/assistant_delete_params.rb +7 -1
  11. data/lib/revox/models/assistant_list_response.rb +1070 -11
  12. data/lib/revox/models/assistant_retrieve_params.rb +7 -1
  13. data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
  14. data/lib/revox/models/assistant_update_params.rb +1043 -11
  15. data/lib/revox/models/assistant_update_response.rb +1097 -12
  16. data/lib/revox/models/call_create_params.rb +1063 -11
  17. data/lib/revox/models/call_create_response.rb +2507 -87
  18. data/lib/revox/models/call_retrieve_params.rb +7 -1
  19. data/lib/revox/models/call_retrieve_response.rb +2512 -87
  20. data/lib/revox/models/campaign_cancel_params.rb +20 -0
  21. data/lib/revox/models/campaign_cancel_response.rb +16 -0
  22. data/lib/revox/models/campaign_create_params.rb +239 -0
  23. data/lib/revox/models/campaign_create_response.rb +2030 -0
  24. data/lib/revox/models/campaign_delete_params.rb +20 -0
  25. data/lib/revox/models/campaign_delete_response.rb +16 -0
  26. data/lib/revox/models/campaign_export_rows_params.rb +20 -0
  27. data/lib/revox/models/campaign_export_rows_response.rb +22 -0
  28. data/lib/revox/models/campaign_get_rows_params.rb +20 -0
  29. data/lib/revox/models/campaign_get_rows_response.rb +3176 -0
  30. data/lib/revox/models/campaign_list_params.rb +14 -0
  31. data/lib/revox/models/campaign_list_response.rb +2024 -0
  32. data/lib/revox/models/campaign_retrieve_params.rb +20 -0
  33. data/lib/revox/models/campaign_retrieve_response.rb +2032 -0
  34. data/lib/revox/models/users/me_retrieve_response.rb +13 -1
  35. data/lib/revox/models/users/me_update_response.rb +13 -1
  36. data/lib/revox/models/voice_list_response.rb +55 -1
  37. data/lib/revox/models/voice_preview_params.rb +43 -3
  38. data/lib/revox/models/voice_retrieve_params.rb +7 -1
  39. data/lib/revox/models.rb +14 -2
  40. data/lib/revox/resources/assistants.rb +138 -6
  41. data/lib/revox/resources/call.rb +10 -27
  42. data/lib/revox/resources/campaigns.rb +176 -0
  43. data/lib/revox/resources/voices.rb +17 -7
  44. data/lib/revox/version.rb +1 -1
  45. data/lib/revox.rb +15 -2
  46. data/rbi/revox/client.rbi +3 -0
  47. data/rbi/revox/internal/util.rbi +28 -0
  48. data/rbi/revox/models/assistant_create_params.rbi +2135 -102
  49. data/rbi/revox/models/assistant_create_response.rbi +2454 -199
  50. data/rbi/revox/models/assistant_delete_params.rbi +11 -5
  51. data/rbi/revox/models/assistant_list_response.rbi +2448 -195
  52. data/rbi/revox/models/assistant_retrieve_params.rbi +11 -5
  53. data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
  54. data/rbi/revox/models/assistant_update_params.rbi +2139 -100
  55. data/rbi/revox/models/assistant_update_response.rbi +2504 -198
  56. data/rbi/revox/models/call_create_params.rbi +2377 -222
  57. data/rbi/revox/models/call_create_response.rbi +5840 -594
  58. data/rbi/revox/models/call_retrieve_params.rbi +11 -5
  59. data/rbi/revox/models/call_retrieve_response.rbi +5872 -618
  60. data/rbi/revox/models/campaign_cancel_params.rbi +33 -0
  61. data/rbi/revox/models/campaign_cancel_response.rbi +23 -0
  62. data/rbi/revox/models/campaign_create_params.rbi +433 -0
  63. data/rbi/revox/models/campaign_create_response.rbi +4170 -0
  64. data/rbi/revox/models/campaign_delete_params.rbi +33 -0
  65. data/rbi/revox/models/campaign_delete_response.rbi +23 -0
  66. data/rbi/revox/models/campaign_export_rows_params.rbi +33 -0
  67. data/rbi/revox/models/campaign_export_rows_response.rbi +29 -0
  68. data/rbi/revox/models/campaign_get_rows_params.rbi +33 -0
  69. data/rbi/revox/models/campaign_get_rows_response.rbi +6706 -0
  70. data/rbi/revox/models/campaign_list_params.rbi +27 -0
  71. data/rbi/revox/models/campaign_list_response.rbi +4156 -0
  72. data/rbi/revox/models/campaign_retrieve_params.rbi +33 -0
  73. data/rbi/revox/models/campaign_retrieve_response.rbi +4175 -0
  74. data/rbi/revox/models/users/me_retrieve_response.rbi +13 -3
  75. data/rbi/revox/models/users/me_update_response.rbi +13 -3
  76. data/rbi/revox/models/voice_list_response.rbi +105 -3
  77. data/rbi/revox/models/voice_preview_params.rbi +60 -2
  78. data/rbi/revox/models/voice_retrieve_params.rbi +6 -1
  79. data/rbi/revox/models.rbi +14 -2
  80. data/rbi/revox/resources/assistants.rbi +301 -6
  81. data/rbi/revox/resources/call.rbi +10 -19
  82. data/rbi/revox/resources/campaigns.rbi +121 -0
  83. data/rbi/revox/resources/voices.rbi +15 -5
  84. data/sig/revox/client.rbs +2 -0
  85. data/sig/revox/internal/util.rbs +14 -0
  86. data/sig/revox/models/assistant_create_params.rbs +841 -4
  87. data/sig/revox/models/assistant_create_response.rbs +860 -3
  88. data/sig/revox/models/assistant_delete_params.rbs +8 -3
  89. data/sig/revox/models/assistant_list_response.rbs +860 -3
  90. data/sig/revox/models/assistant_retrieve_params.rbs +8 -3
  91. data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
  92. data/sig/revox/models/assistant_update_params.rbs +846 -4
  93. data/sig/revox/models/assistant_update_response.rbs +886 -6
  94. data/sig/revox/models/call_create_params.rbs +844 -6
  95. data/sig/revox/models/call_create_response.rbs +2166 -79
  96. data/sig/revox/models/call_retrieve_params.rbs +9 -3
  97. data/sig/revox/models/call_retrieve_response.rbs +2166 -79
  98. data/sig/revox/models/campaign_cancel_params.rbs +20 -0
  99. data/sig/revox/models/campaign_cancel_response.rbs +13 -0
  100. data/sig/revox/models/campaign_create_params.rbs +203 -0
  101. data/sig/revox/models/campaign_create_response.rbs +1694 -0
  102. data/sig/revox/models/campaign_delete_params.rbs +20 -0
  103. data/sig/revox/models/campaign_delete_response.rbs +13 -0
  104. data/sig/revox/models/campaign_export_rows_params.rbs +20 -0
  105. data/sig/revox/models/campaign_export_rows_response.rbs +15 -0
  106. data/sig/revox/models/campaign_get_rows_params.rbs +20 -0
  107. data/sig/revox/models/campaign_get_rows_response.rbs +2688 -0
  108. data/sig/revox/models/campaign_list_params.rbs +14 -0
  109. data/sig/revox/models/campaign_list_response.rbs +1694 -0
  110. data/sig/revox/models/campaign_retrieve_params.rbs +20 -0
  111. data/sig/revox/models/campaign_retrieve_response.rbs +1694 -0
  112. data/sig/revox/models/users/me_retrieve_response.rbs +8 -3
  113. data/sig/revox/models/users/me_update_response.rbs +8 -3
  114. data/sig/revox/models/voice_list_response.rbs +45 -3
  115. data/sig/revox/models/voice_preview_params.rbs +35 -1
  116. data/sig/revox/models/voice_retrieve_params.rbs +5 -1
  117. data/sig/revox/models.rbs +14 -2
  118. data/sig/revox/resources/assistants.rbs +54 -0
  119. data/sig/revox/resources/call.rbs +0 -6
  120. data/sig/revox/resources/campaigns.rbs +49 -0
  121. data/sig/revox/resources/voices.rbs +3 -0
  122. metadata +47 -8
  123. data/lib/revox/models/call_list_params.rb +0 -29
  124. data/lib/revox/models/call_list_response.rb +0 -197
  125. data/rbi/revox/models/call_list_params.rbi +0 -47
  126. data/rbi/revox/models/call_list_response.rbi +0 -401
  127. data/sig/revox/models/call_list_params.rbs +0 -28
  128. data/sig/revox/models/call_list_response.rbs +0 -171
@@ -0,0 +1,4156 @@
1
+ # typed: strong
2
+
3
+ module Revox
4
+ module Models
5
+ class CampaignListResponse < Revox::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Revox::Models::CampaignListResponse, Revox::Internal::AnyHash)
9
+ end
10
+
11
+ sig { returns(T::Array[Revox::Models::CampaignListResponse::Campaign]) }
12
+ attr_accessor :campaigns
13
+
14
+ sig do
15
+ params(
16
+ campaigns:
17
+ T::Array[Revox::Models::CampaignListResponse::Campaign::OrHash]
18
+ ).returns(T.attached_class)
19
+ end
20
+ def self.new(campaigns:)
21
+ end
22
+
23
+ sig do
24
+ override.returns(
25
+ { campaigns: T::Array[Revox::Models::CampaignListResponse::Campaign] }
26
+ )
27
+ end
28
+ def to_hash
29
+ end
30
+
31
+ class Campaign < Revox::Internal::Type::BaseModel
32
+ OrHash =
33
+ T.type_alias do
34
+ T.any(
35
+ Revox::Models::CampaignListResponse::Campaign,
36
+ Revox::Internal::AnyHash
37
+ )
38
+ end
39
+
40
+ sig { returns(String) }
41
+ attr_accessor :id
42
+
43
+ sig { returns(String) }
44
+ attr_accessor :assistant_id
45
+
46
+ sig { returns(T.anything) }
47
+ attr_accessor :created_at
48
+
49
+ sig { returns(T::Boolean) }
50
+ attr_accessor :is_cancelled
51
+
52
+ sig { returns(String) }
53
+ attr_accessor :name
54
+
55
+ sig { returns(String) }
56
+ attr_accessor :organization_id
57
+
58
+ sig do
59
+ returns(
60
+ Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol
61
+ )
62
+ end
63
+ attr_accessor :status
64
+
65
+ sig do
66
+ returns(
67
+ Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol
68
+ )
69
+ end
70
+ attr_accessor :type
71
+
72
+ sig { returns(T.anything) }
73
+ attr_accessor :updated_at
74
+
75
+ sig { returns(T.nilable(String)) }
76
+ attr_accessor :active_takeover_call_id
77
+
78
+ sig do
79
+ returns(
80
+ T.nilable(Revox::Models::CampaignListResponse::Campaign::Assistant)
81
+ )
82
+ end
83
+ attr_reader :assistant
84
+
85
+ sig do
86
+ params(
87
+ assistant:
88
+ Revox::Models::CampaignListResponse::Campaign::Assistant::OrHash
89
+ ).void
90
+ end
91
+ attr_writer :assistant
92
+
93
+ # Configuration for call retry behavior including time windows, delays, and max
94
+ # iterations. If not provided, defaults will be used.
95
+ sig do
96
+ returns(
97
+ T.nilable(
98
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig
99
+ )
100
+ )
101
+ end
102
+ attr_reader :call_retry_config
103
+
104
+ sig do
105
+ params(
106
+ call_retry_config:
107
+ T.nilable(
108
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::OrHash
109
+ )
110
+ ).void
111
+ end
112
+ attr_writer :call_retry_config
113
+
114
+ # A member of the current organization.
115
+ sig do
116
+ returns(
117
+ T.nilable(Revox::Models::CampaignListResponse::Campaign::CreatedBy)
118
+ )
119
+ end
120
+ attr_reader :created_by
121
+
122
+ sig do
123
+ params(
124
+ created_by:
125
+ T.nilable(
126
+ Revox::Models::CampaignListResponse::Campaign::CreatedBy::OrHash
127
+ )
128
+ ).void
129
+ end
130
+ attr_writer :created_by
131
+
132
+ sig { returns(T.nilable(String)) }
133
+ attr_accessor :from_phone_number
134
+
135
+ sig do
136
+ returns(
137
+ T.nilable(
138
+ Revox::Models::CampaignListResponse::Campaign::FunnelStats
139
+ )
140
+ )
141
+ end
142
+ attr_reader :funnel_stats
143
+
144
+ sig do
145
+ params(
146
+ funnel_stats:
147
+ Revox::Models::CampaignListResponse::Campaign::FunnelStats::OrHash
148
+ ).void
149
+ end
150
+ attr_writer :funnel_stats
151
+
152
+ sig { returns(T.nilable(Float)) }
153
+ attr_accessor :max_concurrent_calls
154
+
155
+ sig do
156
+ returns(
157
+ T.nilable(
158
+ Revox::Models::CampaignListResponse::Campaign::PausedReason::TaggedSymbol
159
+ )
160
+ )
161
+ end
162
+ attr_accessor :paused_reason
163
+
164
+ sig { returns(T.nilable(Float)) }
165
+ attr_reader :present_count
166
+
167
+ sig { params(present_count: Float).void }
168
+ attr_writer :present_count
169
+
170
+ sig do
171
+ returns(
172
+ T.nilable(Revox::Models::CampaignListResponse::Campaign::RowStats)
173
+ )
174
+ end
175
+ attr_reader :row_stats
176
+
177
+ sig do
178
+ params(
179
+ row_stats:
180
+ Revox::Models::CampaignListResponse::Campaign::RowStats::OrHash
181
+ ).void
182
+ end
183
+ attr_writer :row_stats
184
+
185
+ sig { returns(T.nilable(T.anything)) }
186
+ attr_reader :scheduled_at
187
+
188
+ sig { params(scheduled_at: T.anything).void }
189
+ attr_writer :scheduled_at
190
+
191
+ # The status of the structured output extraction.
192
+ sig do
193
+ returns(
194
+ T.nilable(
195
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
196
+ )
197
+ )
198
+ end
199
+ attr_reader :structured_output_extraction
200
+
201
+ sig do
202
+ params(
203
+ structured_output_extraction:
204
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::OrSymbol
205
+ ).void
206
+ end
207
+ attr_writer :structured_output_extraction
208
+
209
+ sig do
210
+ params(
211
+ id: String,
212
+ assistant_id: String,
213
+ created_at: T.anything,
214
+ is_cancelled: T::Boolean,
215
+ name: String,
216
+ organization_id: String,
217
+ status:
218
+ Revox::Models::CampaignListResponse::Campaign::Status::OrSymbol,
219
+ type: Revox::Models::CampaignListResponse::Campaign::Type::OrSymbol,
220
+ updated_at: T.anything,
221
+ active_takeover_call_id: T.nilable(String),
222
+ assistant:
223
+ Revox::Models::CampaignListResponse::Campaign::Assistant::OrHash,
224
+ call_retry_config:
225
+ T.nilable(
226
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::OrHash
227
+ ),
228
+ created_by:
229
+ T.nilable(
230
+ Revox::Models::CampaignListResponse::Campaign::CreatedBy::OrHash
231
+ ),
232
+ from_phone_number: T.nilable(String),
233
+ funnel_stats:
234
+ Revox::Models::CampaignListResponse::Campaign::FunnelStats::OrHash,
235
+ max_concurrent_calls: T.nilable(Float),
236
+ paused_reason:
237
+ T.nilable(
238
+ Revox::Models::CampaignListResponse::Campaign::PausedReason::OrSymbol
239
+ ),
240
+ present_count: Float,
241
+ row_stats:
242
+ Revox::Models::CampaignListResponse::Campaign::RowStats::OrHash,
243
+ scheduled_at: T.anything,
244
+ structured_output_extraction:
245
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::OrSymbol
246
+ ).returns(T.attached_class)
247
+ end
248
+ def self.new(
249
+ id:,
250
+ assistant_id:,
251
+ created_at:,
252
+ is_cancelled:,
253
+ name:,
254
+ organization_id:,
255
+ status:,
256
+ type:,
257
+ updated_at:,
258
+ active_takeover_call_id: nil,
259
+ assistant: nil,
260
+ # Configuration for call retry behavior including time windows, delays, and max
261
+ # iterations. If not provided, defaults will be used.
262
+ call_retry_config: nil,
263
+ # A member of the current organization.
264
+ created_by: nil,
265
+ from_phone_number: nil,
266
+ funnel_stats: nil,
267
+ max_concurrent_calls: nil,
268
+ paused_reason: nil,
269
+ present_count: nil,
270
+ row_stats: nil,
271
+ scheduled_at: nil,
272
+ # The status of the structured output extraction.
273
+ structured_output_extraction: nil
274
+ )
275
+ end
276
+
277
+ sig do
278
+ override.returns(
279
+ {
280
+ id: String,
281
+ assistant_id: String,
282
+ created_at: T.anything,
283
+ is_cancelled: T::Boolean,
284
+ name: String,
285
+ organization_id: String,
286
+ status:
287
+ Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol,
288
+ type:
289
+ Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol,
290
+ updated_at: T.anything,
291
+ active_takeover_call_id: T.nilable(String),
292
+ assistant:
293
+ Revox::Models::CampaignListResponse::Campaign::Assistant,
294
+ call_retry_config:
295
+ T.nilable(
296
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig
297
+ ),
298
+ created_by:
299
+ T.nilable(
300
+ Revox::Models::CampaignListResponse::Campaign::CreatedBy
301
+ ),
302
+ from_phone_number: T.nilable(String),
303
+ funnel_stats:
304
+ Revox::Models::CampaignListResponse::Campaign::FunnelStats,
305
+ max_concurrent_calls: T.nilable(Float),
306
+ paused_reason:
307
+ T.nilable(
308
+ Revox::Models::CampaignListResponse::Campaign::PausedReason::TaggedSymbol
309
+ ),
310
+ present_count: Float,
311
+ row_stats:
312
+ Revox::Models::CampaignListResponse::Campaign::RowStats,
313
+ scheduled_at: T.anything,
314
+ structured_output_extraction:
315
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
316
+ }
317
+ )
318
+ end
319
+ def to_hash
320
+ end
321
+
322
+ module Status
323
+ extend Revox::Internal::Type::Enum
324
+
325
+ TaggedSymbol =
326
+ T.type_alias do
327
+ T.all(
328
+ Symbol,
329
+ Revox::Models::CampaignListResponse::Campaign::Status
330
+ )
331
+ end
332
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
333
+
334
+ DRAFT =
335
+ T.let(
336
+ :draft,
337
+ Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol
338
+ )
339
+ RUNNING =
340
+ T.let(
341
+ :running,
342
+ Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol
343
+ )
344
+ PAUSED =
345
+ T.let(
346
+ :paused,
347
+ Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol
348
+ )
349
+ COMPLETED =
350
+ T.let(
351
+ :completed,
352
+ Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol
353
+ )
354
+
355
+ sig do
356
+ override.returns(
357
+ T::Array[
358
+ Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol
359
+ ]
360
+ )
361
+ end
362
+ def self.values
363
+ end
364
+ end
365
+
366
+ module Type
367
+ extend Revox::Internal::Type::Enum
368
+
369
+ TaggedSymbol =
370
+ T.type_alias do
371
+ T.all(Symbol, Revox::Models::CampaignListResponse::Campaign::Type)
372
+ end
373
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
374
+
375
+ REGULAR =
376
+ T.let(
377
+ :regular,
378
+ Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol
379
+ )
380
+ JUMP_IN =
381
+ T.let(
382
+ :jump_in,
383
+ Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol
384
+ )
385
+
386
+ sig do
387
+ override.returns(
388
+ T::Array[
389
+ Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol
390
+ ]
391
+ )
392
+ end
393
+ def self.values
394
+ end
395
+ end
396
+
397
+ class Assistant < Revox::Internal::Type::BaseModel
398
+ OrHash =
399
+ T.type_alias do
400
+ T.any(
401
+ Revox::Models::CampaignListResponse::Campaign::Assistant,
402
+ Revox::Internal::AnyHash
403
+ )
404
+ end
405
+
406
+ sig { returns(String) }
407
+ attr_accessor :id
408
+
409
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
410
+ # after-call SMS is sent. Use "none" when outcome is null.
411
+ sig do
412
+ returns(
413
+ T.nilable(
414
+ T::Array[
415
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
416
+ ]
417
+ )
418
+ )
419
+ end
420
+ attr_accessor :after_call_sms_outcomes
421
+
422
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
423
+ # placeholders. When null, no after-call SMS is sent.
424
+ sig { returns(T.nilable(String)) }
425
+ attr_accessor :after_call_sms_prompt
426
+
427
+ # Ambient background sound to play during the call. null disables it.
428
+ sig do
429
+ returns(
430
+ T.nilable(
431
+ Revox::Models::CampaignListResponse::Campaign::Assistant::BackgroundSound::TaggedSymbol
432
+ )
433
+ )
434
+ end
435
+ attr_accessor :background_sound
436
+
437
+ # Volume of the ambient background sound (0 = silent, 1 = max).
438
+ sig { returns(Float) }
439
+ attr_accessor :background_sound_volume
440
+
441
+ sig do
442
+ returns(
443
+ T.nilable(
444
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Calendly
445
+ )
446
+ )
447
+ end
448
+ attr_reader :calendly
449
+
450
+ sig do
451
+ params(
452
+ calendly:
453
+ T.nilable(
454
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Calendly::OrHash
455
+ )
456
+ ).void
457
+ end
458
+ attr_writer :calendly
459
+
460
+ # Configuration for call retry behavior including time windows, delays, and max
461
+ # iterations. If not provided, defaults will be used.
462
+ sig do
463
+ returns(
464
+ T.nilable(
465
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig
466
+ )
467
+ )
468
+ end
469
+ attr_reader :call_retry_config
470
+
471
+ sig do
472
+ params(
473
+ call_retry_config:
474
+ T.nilable(
475
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::OrHash
476
+ )
477
+ ).void
478
+ end
479
+ attr_writer :call_retry_config
480
+
481
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
482
+ sig { returns(T.nilable(String)) }
483
+ attr_accessor :cartesia_dictionary_pronunciation_id
484
+
485
+ sig { returns(T.anything) }
486
+ attr_accessor :created_at
487
+
488
+ sig do
489
+ returns(
490
+ T.nilable(
491
+ T::Array[
492
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool
493
+ ]
494
+ )
495
+ )
496
+ end
497
+ attr_accessor :custom_tools
498
+
499
+ # Email address(es) to receive notifications when a call ends with a matching
500
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
501
+ # bob@y.com").
502
+ sig { returns(T.nilable(String)) }
503
+ attr_accessor :email_notification_address
504
+
505
+ # The language used for the notification email content. One of "en" or "fr".
506
+ sig do
507
+ returns(
508
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
509
+ )
510
+ end
511
+ attr_accessor :email_notification_language
512
+
513
+ # Which call outcomes trigger an email notification. E.g. ["interested",
514
+ # "completed", "none"]. Use "none" when outcome is null.
515
+ sig do
516
+ returns(
517
+ T.nilable(
518
+ T::Array[
519
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
520
+ ]
521
+ )
522
+ )
523
+ end
524
+ attr_accessor :email_notification_outcomes
525
+
526
+ sig { returns(T.nilable(String)) }
527
+ attr_accessor :end_of_call_sentence
528
+
529
+ sig { returns(T.nilable(String)) }
530
+ attr_accessor :first_sentence
531
+
532
+ # Delay in milliseconds before speaking the first sentence. Default: 400.
533
+ sig { returns(Integer) }
534
+ attr_accessor :first_sentence_delay_ms
535
+
536
+ sig do
537
+ returns(
538
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
539
+ )
540
+ end
541
+ attr_accessor :first_sentence_mode
542
+
543
+ # Override the default outbound phone number for calls placed with this assistant.
544
+ # When null, the organization's default phone number is used.
545
+ sig { returns(T.nilable(String)) }
546
+ attr_accessor :from_phone_number
547
+
548
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
549
+ # not configured.
550
+ sig do
551
+ returns(
552
+ T.nilable(
553
+ Revox::Models::CampaignListResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
554
+ )
555
+ )
556
+ end
557
+ attr_accessor :human_transfer_mode
558
+
559
+ # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
560
+ # skip turns to navigate phone menus.
561
+ sig { returns(T::Boolean) }
562
+ attr_accessor :ivr_navigation_enabled
563
+
564
+ sig do
565
+ returns(
566
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::Variants
567
+ )
568
+ end
569
+ attr_accessor :llm_model
570
+
571
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
572
+ # unset.
573
+ sig { returns(T.nilable(String)) }
574
+ attr_accessor :logo_url
575
+
576
+ # The maximum duration of the call in seconds. This is the maximum time the call
577
+ # will be allowed to run.
578
+ sig { returns(Float) }
579
+ attr_accessor :max_call_duration_secs
580
+
581
+ # Optional message the agent will say, without being interruptible, when the call
582
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
583
+ # null, the call ends silently.
584
+ sig { returns(T.nilable(String)) }
585
+ attr_accessor :max_duration_end_message
586
+
587
+ sig { returns(String) }
588
+ attr_accessor :name
589
+
590
+ sig { returns(String) }
591
+ attr_accessor :organization_id
592
+
593
+ sig do
594
+ returns(
595
+ T.nilable(
596
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Position
597
+ )
598
+ )
599
+ end
600
+ attr_reader :position
601
+
602
+ sig do
603
+ params(
604
+ position:
605
+ T.nilable(
606
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Position::OrHash
607
+ )
608
+ ).void
609
+ end
610
+ attr_writer :position
611
+
612
+ sig { returns(String) }
613
+ attr_accessor :prompt
614
+
615
+ sig do
616
+ returns(
617
+ T.nilable(
618
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow
619
+ )
620
+ )
621
+ end
622
+ attr_reader :prompt_flow
623
+
624
+ sig do
625
+ params(
626
+ prompt_flow:
627
+ T.nilable(
628
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::OrHash
629
+ )
630
+ ).void
631
+ end
632
+ attr_writer :prompt_flow
633
+
634
+ sig do
635
+ returns(
636
+ T.nilable(
637
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack
638
+ )
639
+ )
640
+ end
641
+ attr_reader :slack
642
+
643
+ sig do
644
+ params(
645
+ slack:
646
+ T.nilable(
647
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::OrHash
648
+ )
649
+ ).void
650
+ end
651
+ attr_writer :slack
652
+
653
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
654
+ # the user on the call.
655
+ sig { returns(T::Boolean) }
656
+ attr_accessor :sms_enabled
657
+
658
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
659
+ # instead of letting the agent generate the message. Supports {{variable}}
660
+ # placeholders.
661
+ sig { returns(T.nilable(String)) }
662
+ attr_accessor :sms_template
663
+
664
+ # The structured output config to use for the call. This is used to extract the
665
+ # data from the call (like email, name, company name, etc.).
666
+ sig do
667
+ returns(
668
+ T.nilable(
669
+ T::Array[
670
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig
671
+ ]
672
+ )
673
+ )
674
+ end
675
+ attr_accessor :structured_output_config
676
+
677
+ # Custom prompt for structured data extraction. If not provided, a default prompt
678
+ # is used. Available variables: {{transcript}}, {{call_direction}},
679
+ # {{user_phone_number}}, {{agent_phone_number}}.
680
+ sig { returns(T.nilable(String)) }
681
+ attr_accessor :structured_output_prompt
682
+
683
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
684
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
685
+ # replacing existing entries.
686
+ sig do
687
+ returns(
688
+ T.nilable(
689
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttContext
690
+ )
691
+ )
692
+ end
693
+ attr_reader :stt_context
694
+
695
+ sig do
696
+ params(
697
+ stt_context:
698
+ T.nilable(
699
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttContext::OrHash
700
+ )
701
+ ).void
702
+ end
703
+ attr_writer :stt_context
704
+
705
+ # Transcriber (speech-to-text) model used for the assistant.
706
+ sig do
707
+ returns(
708
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttModel::TaggedSymbol
709
+ )
710
+ end
711
+ attr_accessor :stt_model
712
+
713
+ # Audio clip to play while the agent is processing a response. One of the built-in
714
+ # LiveKit audio clips; null disables it.
715
+ sig do
716
+ returns(
717
+ T.nilable(
718
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
719
+ )
720
+ )
721
+ end
722
+ attr_accessor :thinking_sound
723
+
724
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
725
+ # the agent is silent while thinking.
726
+ sig { returns(Float) }
727
+ attr_accessor :thinking_sound_probability
728
+
729
+ # Volume of the thinking sound (0 = silent, 1 = max).
730
+ sig { returns(Float) }
731
+ attr_accessor :thinking_sound_volume
732
+
733
+ # Phone number to transfer calls to when users request to speak to a human agent.
734
+ sig { returns(T.nilable(String)) }
735
+ attr_accessor :transfer_phone_number
736
+
737
+ sig do
738
+ returns(
739
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::TaggedSymbol
740
+ )
741
+ end
742
+ attr_accessor :type
743
+
744
+ sig { returns(T.anything) }
745
+ attr_accessor :updated_at
746
+
747
+ sig do
748
+ returns(
749
+ T.nilable(
750
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice
751
+ )
752
+ )
753
+ end
754
+ attr_reader :voice
755
+
756
+ sig do
757
+ params(
758
+ voice:
759
+ T.nilable(
760
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::OrHash
761
+ )
762
+ ).void
763
+ end
764
+ attr_writer :voice
765
+
766
+ # If set, when voicemail is detected the agent will speak this message then hang
767
+ # up; if null, hang up immediately.
768
+ sig { returns(T.nilable(String)) }
769
+ attr_accessor :voicemail_message
770
+
771
+ # Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
772
+ # When null, no SMS is sent on voicemail.
773
+ sig { returns(T.nilable(String)) }
774
+ attr_accessor :voicemail_sms_prompt
775
+
776
+ # Warm transfer only: instructions for the supervisor handoff summary; null when
777
+ # not configured or cold transfer.
778
+ sig { returns(T.nilable(String)) }
779
+ attr_accessor :warm_transfer_summary_instructions
780
+
781
+ # The webhook URL to call when the call is completed.
782
+ sig { returns(T.nilable(String)) }
783
+ attr_accessor :webhook_url
784
+
785
+ sig do
786
+ returns(
787
+ T.nilable(
788
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho
789
+ )
790
+ )
791
+ end
792
+ attr_reader :zoho
793
+
794
+ sig do
795
+ params(
796
+ zoho:
797
+ T.nilable(
798
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::OrHash
799
+ )
800
+ ).void
801
+ end
802
+ attr_writer :zoho
803
+
804
+ # The user who created the assistant.
805
+ sig do
806
+ returns(
807
+ T.nilable(
808
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CreatedBy
809
+ )
810
+ )
811
+ end
812
+ attr_reader :created_by
813
+
814
+ sig do
815
+ params(
816
+ created_by:
817
+ T.nilable(
818
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CreatedBy::OrHash
819
+ )
820
+ ).void
821
+ end
822
+ attr_writer :created_by
823
+
824
+ sig do
825
+ returns(
826
+ T.nilable(
827
+ T::Array[
828
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem
829
+ ]
830
+ )
831
+ )
832
+ end
833
+ attr_reader :faq_items
834
+
835
+ sig do
836
+ params(
837
+ faq_items:
838
+ T::Array[
839
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::OrHash
840
+ ]
841
+ ).void
842
+ end
843
+ attr_writer :faq_items
844
+
845
+ sig { returns(T.nilable(T::Boolean)) }
846
+ attr_reader :is_realestate_assistant
847
+
848
+ sig { params(is_realestate_assistant: T::Boolean).void }
849
+ attr_writer :is_realestate_assistant
850
+
851
+ sig { returns(T.nilable(Float)) }
852
+ attr_reader :pending_faq_count
853
+
854
+ sig { params(pending_faq_count: Float).void }
855
+ attr_writer :pending_faq_count
856
+
857
+ sig do
858
+ params(
859
+ id: String,
860
+ after_call_sms_outcomes:
861
+ T.nilable(
862
+ T::Array[
863
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::OrSymbol
864
+ ]
865
+ ),
866
+ after_call_sms_prompt: T.nilable(String),
867
+ background_sound:
868
+ T.nilable(
869
+ Revox::Models::CampaignListResponse::Campaign::Assistant::BackgroundSound::OrSymbol
870
+ ),
871
+ background_sound_volume: Float,
872
+ calendly:
873
+ T.nilable(
874
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Calendly::OrHash
875
+ ),
876
+ call_retry_config:
877
+ T.nilable(
878
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::OrHash
879
+ ),
880
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
881
+ created_at: T.anything,
882
+ custom_tools:
883
+ T.nilable(
884
+ T::Array[
885
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::OrHash
886
+ ]
887
+ ),
888
+ email_notification_address: T.nilable(String),
889
+ email_notification_language:
890
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::OrSymbol,
891
+ email_notification_outcomes:
892
+ T.nilable(
893
+ T::Array[
894
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::OrSymbol
895
+ ]
896
+ ),
897
+ end_of_call_sentence: T.nilable(String),
898
+ first_sentence: T.nilable(String),
899
+ first_sentence_delay_ms: Integer,
900
+ first_sentence_mode:
901
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::OrSymbol,
902
+ from_phone_number: T.nilable(String),
903
+ human_transfer_mode:
904
+ T.nilable(
905
+ Revox::Models::CampaignListResponse::Campaign::Assistant::HumanTransferMode::OrSymbol
906
+ ),
907
+ ivr_navigation_enabled: T::Boolean,
908
+ llm_model:
909
+ T.any(
910
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::OrHash,
911
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember1::OrHash,
912
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember2::OrHash,
913
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3::OrHash
914
+ ),
915
+ logo_url: T.nilable(String),
916
+ max_call_duration_secs: Float,
917
+ max_duration_end_message: T.nilable(String),
918
+ name: String,
919
+ organization_id: String,
920
+ position:
921
+ T.nilable(
922
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Position::OrHash
923
+ ),
924
+ prompt: String,
925
+ prompt_flow:
926
+ T.nilable(
927
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::OrHash
928
+ ),
929
+ slack:
930
+ T.nilable(
931
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::OrHash
932
+ ),
933
+ sms_enabled: T::Boolean,
934
+ sms_template: T.nilable(String),
935
+ structured_output_config:
936
+ T.nilable(
937
+ T::Array[
938
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::OrHash
939
+ ]
940
+ ),
941
+ structured_output_prompt: T.nilable(String),
942
+ stt_context:
943
+ T.nilable(
944
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttContext::OrHash
945
+ ),
946
+ stt_model:
947
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttModel::OrSymbol,
948
+ thinking_sound:
949
+ T.nilable(
950
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::OrSymbol
951
+ ),
952
+ thinking_sound_probability: Float,
953
+ thinking_sound_volume: Float,
954
+ transfer_phone_number: T.nilable(String),
955
+ type:
956
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::OrSymbol,
957
+ updated_at: T.anything,
958
+ voice:
959
+ T.nilable(
960
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::OrHash
961
+ ),
962
+ voicemail_message: T.nilable(String),
963
+ voicemail_sms_prompt: T.nilable(String),
964
+ warm_transfer_summary_instructions: T.nilable(String),
965
+ webhook_url: T.nilable(String),
966
+ zoho:
967
+ T.nilable(
968
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::OrHash
969
+ ),
970
+ created_by:
971
+ T.nilable(
972
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CreatedBy::OrHash
973
+ ),
974
+ faq_items:
975
+ T::Array[
976
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::OrHash
977
+ ],
978
+ is_realestate_assistant: T::Boolean,
979
+ pending_faq_count: Float
980
+ ).returns(T.attached_class)
981
+ end
982
+ def self.new(
983
+ id:,
984
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
985
+ # after-call SMS is sent. Use "none" when outcome is null.
986
+ after_call_sms_outcomes:,
987
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
988
+ # placeholders. When null, no after-call SMS is sent.
989
+ after_call_sms_prompt:,
990
+ # Ambient background sound to play during the call. null disables it.
991
+ background_sound:,
992
+ # Volume of the ambient background sound (0 = silent, 1 = max).
993
+ background_sound_volume:,
994
+ calendly:,
995
+ # Configuration for call retry behavior including time windows, delays, and max
996
+ # iterations. If not provided, defaults will be used.
997
+ call_retry_config:,
998
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
999
+ cartesia_dictionary_pronunciation_id:,
1000
+ created_at:,
1001
+ custom_tools:,
1002
+ # Email address(es) to receive notifications when a call ends with a matching
1003
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
1004
+ # bob@y.com").
1005
+ email_notification_address:,
1006
+ # The language used for the notification email content. One of "en" or "fr".
1007
+ email_notification_language:,
1008
+ # Which call outcomes trigger an email notification. E.g. ["interested",
1009
+ # "completed", "none"]. Use "none" when outcome is null.
1010
+ email_notification_outcomes:,
1011
+ end_of_call_sentence:,
1012
+ first_sentence:,
1013
+ # Delay in milliseconds before speaking the first sentence. Default: 400.
1014
+ first_sentence_delay_ms:,
1015
+ first_sentence_mode:,
1016
+ # Override the default outbound phone number for calls placed with this assistant.
1017
+ # When null, the organization's default phone number is used.
1018
+ from_phone_number:,
1019
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1020
+ # not configured.
1021
+ human_transfer_mode:,
1022
+ # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
1023
+ # skip turns to navigate phone menus.
1024
+ ivr_navigation_enabled:,
1025
+ llm_model:,
1026
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
1027
+ # unset.
1028
+ logo_url:,
1029
+ # The maximum duration of the call in seconds. This is the maximum time the call
1030
+ # will be allowed to run.
1031
+ max_call_duration_secs:,
1032
+ # Optional message the agent will say, without being interruptible, when the call
1033
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
1034
+ # null, the call ends silently.
1035
+ max_duration_end_message:,
1036
+ name:,
1037
+ organization_id:,
1038
+ position:,
1039
+ prompt:,
1040
+ prompt_flow:,
1041
+ slack:,
1042
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
1043
+ # the user on the call.
1044
+ sms_enabled:,
1045
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
1046
+ # instead of letting the agent generate the message. Supports {{variable}}
1047
+ # placeholders.
1048
+ sms_template:,
1049
+ # The structured output config to use for the call. This is used to extract the
1050
+ # data from the call (like email, name, company name, etc.).
1051
+ structured_output_config:,
1052
+ # Custom prompt for structured data extraction. If not provided, a default prompt
1053
+ # is used. Available variables: {{transcript}}, {{call_direction}},
1054
+ # {{user_phone_number}}, {{agent_phone_number}}.
1055
+ structured_output_prompt:,
1056
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
1057
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
1058
+ # replacing existing entries.
1059
+ stt_context:,
1060
+ # Transcriber (speech-to-text) model used for the assistant.
1061
+ stt_model:,
1062
+ # Audio clip to play while the agent is processing a response. One of the built-in
1063
+ # LiveKit audio clips; null disables it.
1064
+ thinking_sound:,
1065
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
1066
+ # the agent is silent while thinking.
1067
+ thinking_sound_probability:,
1068
+ # Volume of the thinking sound (0 = silent, 1 = max).
1069
+ thinking_sound_volume:,
1070
+ # Phone number to transfer calls to when users request to speak to a human agent.
1071
+ transfer_phone_number:,
1072
+ type:,
1073
+ updated_at:,
1074
+ voice:,
1075
+ # If set, when voicemail is detected the agent will speak this message then hang
1076
+ # up; if null, hang up immediately.
1077
+ voicemail_message:,
1078
+ # Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
1079
+ # When null, no SMS is sent on voicemail.
1080
+ voicemail_sms_prompt:,
1081
+ # Warm transfer only: instructions for the supervisor handoff summary; null when
1082
+ # not configured or cold transfer.
1083
+ warm_transfer_summary_instructions:,
1084
+ # The webhook URL to call when the call is completed.
1085
+ webhook_url:,
1086
+ zoho:,
1087
+ # The user who created the assistant.
1088
+ created_by: nil,
1089
+ faq_items: nil,
1090
+ is_realestate_assistant: nil,
1091
+ pending_faq_count: nil
1092
+ )
1093
+ end
1094
+
1095
+ sig do
1096
+ override.returns(
1097
+ {
1098
+ id: String,
1099
+ after_call_sms_outcomes:
1100
+ T.nilable(
1101
+ T::Array[
1102
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1103
+ ]
1104
+ ),
1105
+ after_call_sms_prompt: T.nilable(String),
1106
+ background_sound:
1107
+ T.nilable(
1108
+ Revox::Models::CampaignListResponse::Campaign::Assistant::BackgroundSound::TaggedSymbol
1109
+ ),
1110
+ background_sound_volume: Float,
1111
+ calendly:
1112
+ T.nilable(
1113
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Calendly
1114
+ ),
1115
+ call_retry_config:
1116
+ T.nilable(
1117
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig
1118
+ ),
1119
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
1120
+ created_at: T.anything,
1121
+ custom_tools:
1122
+ T.nilable(
1123
+ T::Array[
1124
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool
1125
+ ]
1126
+ ),
1127
+ email_notification_address: T.nilable(String),
1128
+ email_notification_language:
1129
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol,
1130
+ email_notification_outcomes:
1131
+ T.nilable(
1132
+ T::Array[
1133
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
1134
+ ]
1135
+ ),
1136
+ end_of_call_sentence: T.nilable(String),
1137
+ first_sentence: T.nilable(String),
1138
+ first_sentence_delay_ms: Integer,
1139
+ first_sentence_mode:
1140
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol,
1141
+ from_phone_number: T.nilable(String),
1142
+ human_transfer_mode:
1143
+ T.nilable(
1144
+ Revox::Models::CampaignListResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
1145
+ ),
1146
+ ivr_navigation_enabled: T::Boolean,
1147
+ llm_model:
1148
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::Variants,
1149
+ logo_url: T.nilable(String),
1150
+ max_call_duration_secs: Float,
1151
+ max_duration_end_message: T.nilable(String),
1152
+ name: String,
1153
+ organization_id: String,
1154
+ position:
1155
+ T.nilable(
1156
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Position
1157
+ ),
1158
+ prompt: String,
1159
+ prompt_flow:
1160
+ T.nilable(
1161
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow
1162
+ ),
1163
+ slack:
1164
+ T.nilable(
1165
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack
1166
+ ),
1167
+ sms_enabled: T::Boolean,
1168
+ sms_template: T.nilable(String),
1169
+ structured_output_config:
1170
+ T.nilable(
1171
+ T::Array[
1172
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig
1173
+ ]
1174
+ ),
1175
+ structured_output_prompt: T.nilable(String),
1176
+ stt_context:
1177
+ T.nilable(
1178
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttContext
1179
+ ),
1180
+ stt_model:
1181
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttModel::TaggedSymbol,
1182
+ thinking_sound:
1183
+ T.nilable(
1184
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
1185
+ ),
1186
+ thinking_sound_probability: Float,
1187
+ thinking_sound_volume: Float,
1188
+ transfer_phone_number: T.nilable(String),
1189
+ type:
1190
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::TaggedSymbol,
1191
+ updated_at: T.anything,
1192
+ voice:
1193
+ T.nilable(
1194
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice
1195
+ ),
1196
+ voicemail_message: T.nilable(String),
1197
+ voicemail_sms_prompt: T.nilable(String),
1198
+ warm_transfer_summary_instructions: T.nilable(String),
1199
+ webhook_url: T.nilable(String),
1200
+ zoho:
1201
+ T.nilable(
1202
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho
1203
+ ),
1204
+ created_by:
1205
+ T.nilable(
1206
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CreatedBy
1207
+ ),
1208
+ faq_items:
1209
+ T::Array[
1210
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem
1211
+ ],
1212
+ is_realestate_assistant: T::Boolean,
1213
+ pending_faq_count: Float
1214
+ }
1215
+ )
1216
+ end
1217
+ def to_hash
1218
+ end
1219
+
1220
+ module AfterCallSMSOutcome
1221
+ extend Revox::Internal::Type::Enum
1222
+
1223
+ TaggedSymbol =
1224
+ T.type_alias do
1225
+ T.all(
1226
+ Symbol,
1227
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome
1228
+ )
1229
+ end
1230
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1231
+
1232
+ NOT_INTERESTED =
1233
+ T.let(
1234
+ :not_interested,
1235
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1236
+ )
1237
+ INTERESTED =
1238
+ T.let(
1239
+ :interested,
1240
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1241
+ )
1242
+ COMPLETED =
1243
+ T.let(
1244
+ :completed,
1245
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1246
+ )
1247
+ REQUESTED_CALLBACK_LATER =
1248
+ T.let(
1249
+ :requested_callback_later,
1250
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1251
+ )
1252
+ REQUESTED_CALLBACK_NEW_NUMBER =
1253
+ T.let(
1254
+ :requested_callback_new_number,
1255
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1256
+ )
1257
+ DO_NOT_CONTACT =
1258
+ T.let(
1259
+ :do_not_contact,
1260
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1261
+ )
1262
+ AI_AVERSE =
1263
+ T.let(
1264
+ :ai_averse,
1265
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1266
+ )
1267
+ NONE =
1268
+ T.let(
1269
+ :none,
1270
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1271
+ )
1272
+
1273
+ sig do
1274
+ override.returns(
1275
+ T::Array[
1276
+ Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1277
+ ]
1278
+ )
1279
+ end
1280
+ def self.values
1281
+ end
1282
+ end
1283
+
1284
+ # Ambient background sound to play during the call. null disables it.
1285
+ module BackgroundSound
1286
+ extend Revox::Internal::Type::Enum
1287
+
1288
+ TaggedSymbol =
1289
+ T.type_alias do
1290
+ T.all(
1291
+ Symbol,
1292
+ Revox::Models::CampaignListResponse::Campaign::Assistant::BackgroundSound
1293
+ )
1294
+ end
1295
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1296
+
1297
+ AUDIO_OFFICE_OGG =
1298
+ T.let(
1299
+ :"audio/office.ogg",
1300
+ Revox::Models::CampaignListResponse::Campaign::Assistant::BackgroundSound::TaggedSymbol
1301
+ )
1302
+
1303
+ sig do
1304
+ override.returns(
1305
+ T::Array[
1306
+ Revox::Models::CampaignListResponse::Campaign::Assistant::BackgroundSound::TaggedSymbol
1307
+ ]
1308
+ )
1309
+ end
1310
+ def self.values
1311
+ end
1312
+ end
1313
+
1314
+ class Calendly < Revox::Internal::Type::BaseModel
1315
+ OrHash =
1316
+ T.type_alias do
1317
+ T.any(
1318
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Calendly,
1319
+ Revox::Internal::AnyHash
1320
+ )
1321
+ end
1322
+
1323
+ # The connection ID representing the link between your Calendly account and Revox.
1324
+ sig { returns(String) }
1325
+ attr_accessor :connection_id
1326
+
1327
+ # The event type ID representing the event type to schedule. (eg:
1328
+ # https://api.calendly.com/event_types/b2330295-2a91-4a1d-bb73-99e7707663d5)
1329
+ sig { returns(String) }
1330
+ attr_accessor :event_type_id
1331
+
1332
+ sig do
1333
+ params(connection_id: String, event_type_id: String).returns(
1334
+ T.attached_class
1335
+ )
1336
+ end
1337
+ def self.new(
1338
+ # The connection ID representing the link between your Calendly account and Revox.
1339
+ connection_id:,
1340
+ # The event type ID representing the event type to schedule. (eg:
1341
+ # https://api.calendly.com/event_types/b2330295-2a91-4a1d-bb73-99e7707663d5)
1342
+ event_type_id:
1343
+ )
1344
+ end
1345
+
1346
+ sig do
1347
+ override.returns({ connection_id: String, event_type_id: String })
1348
+ end
1349
+ def to_hash
1350
+ end
1351
+ end
1352
+
1353
+ class CallRetryConfig < Revox::Internal::Type::BaseModel
1354
+ OrHash =
1355
+ T.type_alias do
1356
+ T.any(
1357
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig,
1358
+ Revox::Internal::AnyHash
1359
+ )
1360
+ end
1361
+
1362
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
1363
+ # Monday through Friday.
1364
+ sig do
1365
+ returns(
1366
+ T::Array[
1367
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1368
+ ]
1369
+ )
1370
+ end
1371
+ attr_accessor :allowed_days
1372
+
1373
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
1374
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
1375
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
1376
+ # Default: false.
1377
+ sig { returns(T::Boolean) }
1378
+ attr_accessor :call_twice_in_a_row
1379
+
1380
+ sig do
1381
+ returns(
1382
+ T::Array[
1383
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::CallingWindow
1384
+ ]
1385
+ )
1386
+ end
1387
+ attr_accessor :calling_windows
1388
+
1389
+ # Maximum number of call retry attempts. Default: 3.
1390
+ sig { returns(Integer) }
1391
+ attr_accessor :max_retry_attempts
1392
+
1393
+ # Optional IANA timezone identifier to override the automatic timezone detection
1394
+ # from phone number. If not provided, timezone is determined from the recipient's
1395
+ # phone number country code. Examples: 'America/New_York', 'Europe/Paris'.
1396
+ sig { returns(T.nilable(String)) }
1397
+ attr_accessor :timezone
1398
+
1399
+ # Configuration for call retry behavior including time windows, delays, and max
1400
+ # iterations. If not provided, defaults will be used.
1401
+ sig do
1402
+ params(
1403
+ allowed_days:
1404
+ T::Array[
1405
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::OrSymbol
1406
+ ],
1407
+ call_twice_in_a_row: T::Boolean,
1408
+ calling_windows:
1409
+ T::Array[
1410
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::CallingWindow::OrHash
1411
+ ],
1412
+ max_retry_attempts: Integer,
1413
+ timezone: T.nilable(String)
1414
+ ).returns(T.attached_class)
1415
+ end
1416
+ def self.new(
1417
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
1418
+ # Monday through Friday.
1419
+ allowed_days:,
1420
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
1421
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
1422
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
1423
+ # Default: false.
1424
+ call_twice_in_a_row:,
1425
+ calling_windows:,
1426
+ # Maximum number of call retry attempts. Default: 3.
1427
+ max_retry_attempts:,
1428
+ # Optional IANA timezone identifier to override the automatic timezone detection
1429
+ # from phone number. If not provided, timezone is determined from the recipient's
1430
+ # phone number country code. Examples: 'America/New_York', 'Europe/Paris'.
1431
+ timezone: nil
1432
+ )
1433
+ end
1434
+
1435
+ sig do
1436
+ override.returns(
1437
+ {
1438
+ allowed_days:
1439
+ T::Array[
1440
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1441
+ ],
1442
+ call_twice_in_a_row: T::Boolean,
1443
+ calling_windows:
1444
+ T::Array[
1445
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::CallingWindow
1446
+ ],
1447
+ max_retry_attempts: Integer,
1448
+ timezone: T.nilable(String)
1449
+ }
1450
+ )
1451
+ end
1452
+ def to_hash
1453
+ end
1454
+
1455
+ module AllowedDay
1456
+ extend Revox::Internal::Type::Enum
1457
+
1458
+ TaggedSymbol =
1459
+ T.type_alias do
1460
+ T.all(
1461
+ Symbol,
1462
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay
1463
+ )
1464
+ end
1465
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1466
+
1467
+ MONDAY =
1468
+ T.let(
1469
+ :monday,
1470
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1471
+ )
1472
+ TUESDAY =
1473
+ T.let(
1474
+ :tuesday,
1475
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1476
+ )
1477
+ WEDNESDAY =
1478
+ T.let(
1479
+ :wednesday,
1480
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1481
+ )
1482
+ THURSDAY =
1483
+ T.let(
1484
+ :thursday,
1485
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1486
+ )
1487
+ FRIDAY =
1488
+ T.let(
1489
+ :friday,
1490
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1491
+ )
1492
+ SATURDAY =
1493
+ T.let(
1494
+ :saturday,
1495
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1496
+ )
1497
+ SUNDAY =
1498
+ T.let(
1499
+ :sunday,
1500
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1501
+ )
1502
+
1503
+ sig do
1504
+ override.returns(
1505
+ T::Array[
1506
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1507
+ ]
1508
+ )
1509
+ end
1510
+ def self.values
1511
+ end
1512
+ end
1513
+
1514
+ class CallingWindow < Revox::Internal::Type::BaseModel
1515
+ OrHash =
1516
+ T.type_alias do
1517
+ T.any(
1518
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::CallingWindow,
1519
+ Revox::Internal::AnyHash
1520
+ )
1521
+ end
1522
+
1523
+ # End time for the calling window in the recipient's timezone (or
1524
+ # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1525
+ # Examples: '17:00', '6pm'. Default: '18:00'.
1526
+ sig { returns(String) }
1527
+ attr_accessor :calling_window_end_time
1528
+
1529
+ # Start time for the calling window in the recipient's timezone (or
1530
+ # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1531
+ # Examples: '09:00', '10am'. Default: '10:00'.
1532
+ sig { returns(String) }
1533
+ attr_accessor :calling_window_start_time
1534
+
1535
+ # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1536
+ sig { returns(Integer) }
1537
+ attr_accessor :retry_delay_seconds
1538
+
1539
+ sig do
1540
+ params(
1541
+ calling_window_end_time: String,
1542
+ calling_window_start_time: String,
1543
+ retry_delay_seconds: Integer
1544
+ ).returns(T.attached_class)
1545
+ end
1546
+ def self.new(
1547
+ # End time for the calling window in the recipient's timezone (or
1548
+ # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1549
+ # Examples: '17:00', '6pm'. Default: '18:00'.
1550
+ calling_window_end_time:,
1551
+ # Start time for the calling window in the recipient's timezone (or
1552
+ # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1553
+ # Examples: '09:00', '10am'. Default: '10:00'.
1554
+ calling_window_start_time:,
1555
+ # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1556
+ retry_delay_seconds:
1557
+ )
1558
+ end
1559
+
1560
+ sig do
1561
+ override.returns(
1562
+ {
1563
+ calling_window_end_time: String,
1564
+ calling_window_start_time: String,
1565
+ retry_delay_seconds: Integer
1566
+ }
1567
+ )
1568
+ end
1569
+ def to_hash
1570
+ end
1571
+ end
1572
+ end
1573
+
1574
+ class CustomTool < Revox::Internal::Type::BaseModel
1575
+ OrHash =
1576
+ T.type_alias do
1577
+ T.any(
1578
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool,
1579
+ Revox::Internal::AnyHash
1580
+ )
1581
+ end
1582
+
1583
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
1584
+ # "{{name}}") for dynamic values
1585
+ sig { returns(T.nilable(String)) }
1586
+ attr_accessor :body_template
1587
+
1588
+ # Human-readable description of what the tool does, used by the LLM to decide when
1589
+ # to call it
1590
+ sig { returns(String) }
1591
+ attr_accessor :description
1592
+
1593
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
1594
+ sig do
1595
+ returns(
1596
+ T::Array[
1597
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Header
1598
+ ]
1599
+ )
1600
+ end
1601
+ attr_accessor :headers
1602
+
1603
+ # Schema defining the parameters the LLM should extract from the conversation to
1604
+ # pass to this tool
1605
+ sig do
1606
+ returns(
1607
+ T::Array[
1608
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema
1609
+ ]
1610
+ )
1611
+ end
1612
+ attr_accessor :input_schema
1613
+
1614
+ # HTTP method to use when calling the API endpoint
1615
+ sig do
1616
+ returns(
1617
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1618
+ )
1619
+ end
1620
+ attr_accessor :method_
1621
+
1622
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
1623
+ sig { returns(String) }
1624
+ attr_accessor :name
1625
+
1626
+ # Query string parameters appended to the URL. Values support {{variable}}
1627
+ # placeholders
1628
+ sig do
1629
+ returns(
1630
+ T::Array[
1631
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::QueryParam
1632
+ ]
1633
+ )
1634
+ end
1635
+ attr_accessor :query_params
1636
+
1637
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
1638
+ # values
1639
+ sig { returns(String) }
1640
+ attr_accessor :url
1641
+
1642
+ sig do
1643
+ params(
1644
+ body_template: T.nilable(String),
1645
+ description: String,
1646
+ headers:
1647
+ T::Array[
1648
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Header::OrHash
1649
+ ],
1650
+ input_schema:
1651
+ T::Array[
1652
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::OrHash
1653
+ ],
1654
+ method_:
1655
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method::OrSymbol,
1656
+ name: String,
1657
+ query_params:
1658
+ T::Array[
1659
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::QueryParam::OrHash
1660
+ ],
1661
+ url: String
1662
+ ).returns(T.attached_class)
1663
+ end
1664
+ def self.new(
1665
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
1666
+ # "{{name}}") for dynamic values
1667
+ body_template:,
1668
+ # Human-readable description of what the tool does, used by the LLM to decide when
1669
+ # to call it
1670
+ description:,
1671
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
1672
+ headers:,
1673
+ # Schema defining the parameters the LLM should extract from the conversation to
1674
+ # pass to this tool
1675
+ input_schema:,
1676
+ # HTTP method to use when calling the API endpoint
1677
+ method_:,
1678
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
1679
+ name:,
1680
+ # Query string parameters appended to the URL. Values support {{variable}}
1681
+ # placeholders
1682
+ query_params:,
1683
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
1684
+ # values
1685
+ url:
1686
+ )
1687
+ end
1688
+
1689
+ sig do
1690
+ override.returns(
1691
+ {
1692
+ body_template: T.nilable(String),
1693
+ description: String,
1694
+ headers:
1695
+ T::Array[
1696
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Header
1697
+ ],
1698
+ input_schema:
1699
+ T::Array[
1700
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema
1701
+ ],
1702
+ method_:
1703
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol,
1704
+ name: String,
1705
+ query_params:
1706
+ T::Array[
1707
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::QueryParam
1708
+ ],
1709
+ url: String
1710
+ }
1711
+ )
1712
+ end
1713
+ def to_hash
1714
+ end
1715
+
1716
+ class Header < Revox::Internal::Type::BaseModel
1717
+ OrHash =
1718
+ T.type_alias do
1719
+ T.any(
1720
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Header,
1721
+ Revox::Internal::AnyHash
1722
+ )
1723
+ end
1724
+
1725
+ sig { returns(String) }
1726
+ attr_accessor :key
1727
+
1728
+ sig { returns(String) }
1729
+ attr_accessor :value
1730
+
1731
+ sig do
1732
+ params(key: String, value: String).returns(T.attached_class)
1733
+ end
1734
+ def self.new(key:, value:)
1735
+ end
1736
+
1737
+ sig { override.returns({ key: String, value: String }) }
1738
+ def to_hash
1739
+ end
1740
+ end
1741
+
1742
+ class InputSchema < Revox::Internal::Type::BaseModel
1743
+ OrHash =
1744
+ T.type_alias do
1745
+ T.any(
1746
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema,
1747
+ Revox::Internal::AnyHash
1748
+ )
1749
+ end
1750
+
1751
+ sig { returns(String) }
1752
+ attr_accessor :name
1753
+
1754
+ sig { returns(T::Boolean) }
1755
+ attr_accessor :required
1756
+
1757
+ sig do
1758
+ returns(
1759
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1760
+ )
1761
+ end
1762
+ attr_accessor :type
1763
+
1764
+ sig { returns(T.nilable(String)) }
1765
+ attr_reader :description
1766
+
1767
+ sig { params(description: String).void }
1768
+ attr_writer :description
1769
+
1770
+ sig { returns(T.nilable(T::Array[String])) }
1771
+ attr_reader :enum_options
1772
+
1773
+ sig { params(enum_options: T::Array[String]).void }
1774
+ attr_writer :enum_options
1775
+
1776
+ sig do
1777
+ params(
1778
+ name: String,
1779
+ required: T::Boolean,
1780
+ type:
1781
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::OrSymbol,
1782
+ description: String,
1783
+ enum_options: T::Array[String]
1784
+ ).returns(T.attached_class)
1785
+ end
1786
+ def self.new(
1787
+ name:,
1788
+ required:,
1789
+ type:,
1790
+ description: nil,
1791
+ enum_options: nil
1792
+ )
1793
+ end
1794
+
1795
+ sig do
1796
+ override.returns(
1797
+ {
1798
+ name: String,
1799
+ required: T::Boolean,
1800
+ type:
1801
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol,
1802
+ description: String,
1803
+ enum_options: T::Array[String]
1804
+ }
1805
+ )
1806
+ end
1807
+ def to_hash
1808
+ end
1809
+
1810
+ module Type
1811
+ extend Revox::Internal::Type::Enum
1812
+
1813
+ TaggedSymbol =
1814
+ T.type_alias do
1815
+ T.all(
1816
+ Symbol,
1817
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type
1818
+ )
1819
+ end
1820
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1821
+
1822
+ STRING =
1823
+ T.let(
1824
+ :string,
1825
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1826
+ )
1827
+ NUMBER =
1828
+ T.let(
1829
+ :number,
1830
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1831
+ )
1832
+ BOOLEAN =
1833
+ T.let(
1834
+ :boolean,
1835
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1836
+ )
1837
+ ENUM =
1838
+ T.let(
1839
+ :enum,
1840
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1841
+ )
1842
+ DATE =
1843
+ T.let(
1844
+ :date,
1845
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1846
+ )
1847
+ DATETIME =
1848
+ T.let(
1849
+ :datetime,
1850
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1851
+ )
1852
+
1853
+ sig do
1854
+ override.returns(
1855
+ T::Array[
1856
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1857
+ ]
1858
+ )
1859
+ end
1860
+ def self.values
1861
+ end
1862
+ end
1863
+ end
1864
+
1865
+ # HTTP method to use when calling the API endpoint
1866
+ module Method
1867
+ extend Revox::Internal::Type::Enum
1868
+
1869
+ TaggedSymbol =
1870
+ T.type_alias do
1871
+ T.all(
1872
+ Symbol,
1873
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method
1874
+ )
1875
+ end
1876
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1877
+
1878
+ GET =
1879
+ T.let(
1880
+ :GET,
1881
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1882
+ )
1883
+ POST =
1884
+ T.let(
1885
+ :POST,
1886
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1887
+ )
1888
+ PUT =
1889
+ T.let(
1890
+ :PUT,
1891
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1892
+ )
1893
+ PATCH =
1894
+ T.let(
1895
+ :PATCH,
1896
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1897
+ )
1898
+ DELETE =
1899
+ T.let(
1900
+ :DELETE,
1901
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1902
+ )
1903
+
1904
+ sig do
1905
+ override.returns(
1906
+ T::Array[
1907
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1908
+ ]
1909
+ )
1910
+ end
1911
+ def self.values
1912
+ end
1913
+ end
1914
+
1915
+ class QueryParam < Revox::Internal::Type::BaseModel
1916
+ OrHash =
1917
+ T.type_alias do
1918
+ T.any(
1919
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::QueryParam,
1920
+ Revox::Internal::AnyHash
1921
+ )
1922
+ end
1923
+
1924
+ sig { returns(String) }
1925
+ attr_accessor :key
1926
+
1927
+ sig { returns(String) }
1928
+ attr_accessor :value
1929
+
1930
+ sig do
1931
+ params(key: String, value: String).returns(T.attached_class)
1932
+ end
1933
+ def self.new(key:, value:)
1934
+ end
1935
+
1936
+ sig { override.returns({ key: String, value: String }) }
1937
+ def to_hash
1938
+ end
1939
+ end
1940
+ end
1941
+
1942
+ # The language used for the notification email content. One of "en" or "fr".
1943
+ module EmailNotificationLanguage
1944
+ extend Revox::Internal::Type::Enum
1945
+
1946
+ TaggedSymbol =
1947
+ T.type_alias do
1948
+ T.all(
1949
+ Symbol,
1950
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage
1951
+ )
1952
+ end
1953
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1954
+
1955
+ EN =
1956
+ T.let(
1957
+ :en,
1958
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1959
+ )
1960
+ FR =
1961
+ T.let(
1962
+ :fr,
1963
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1964
+ )
1965
+
1966
+ sig do
1967
+ override.returns(
1968
+ T::Array[
1969
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1970
+ ]
1971
+ )
1972
+ end
1973
+ def self.values
1974
+ end
1975
+ end
1976
+
1977
+ module EmailNotificationOutcome
1978
+ extend Revox::Internal::Type::Enum
1979
+
1980
+ TaggedSymbol =
1981
+ T.type_alias do
1982
+ T.all(
1983
+ Symbol,
1984
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome
1985
+ )
1986
+ end
1987
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1988
+
1989
+ NOT_INTERESTED =
1990
+ T.let(
1991
+ :not_interested,
1992
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
1993
+ )
1994
+ INTERESTED =
1995
+ T.let(
1996
+ :interested,
1997
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
1998
+ )
1999
+ COMPLETED =
2000
+ T.let(
2001
+ :completed,
2002
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2003
+ )
2004
+ REQUESTED_CALLBACK_LATER =
2005
+ T.let(
2006
+ :requested_callback_later,
2007
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2008
+ )
2009
+ REQUESTED_CALLBACK_NEW_NUMBER =
2010
+ T.let(
2011
+ :requested_callback_new_number,
2012
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2013
+ )
2014
+ DO_NOT_CONTACT =
2015
+ T.let(
2016
+ :do_not_contact,
2017
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2018
+ )
2019
+ AI_AVERSE =
2020
+ T.let(
2021
+ :ai_averse,
2022
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2023
+ )
2024
+ NONE =
2025
+ T.let(
2026
+ :none,
2027
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2028
+ )
2029
+
2030
+ sig do
2031
+ override.returns(
2032
+ T::Array[
2033
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2034
+ ]
2035
+ )
2036
+ end
2037
+ def self.values
2038
+ end
2039
+ end
2040
+
2041
+ module FirstSentenceMode
2042
+ extend Revox::Internal::Type::Enum
2043
+
2044
+ TaggedSymbol =
2045
+ T.type_alias do
2046
+ T.all(
2047
+ Symbol,
2048
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode
2049
+ )
2050
+ end
2051
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2052
+
2053
+ GENERATED =
2054
+ T.let(
2055
+ :generated,
2056
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
2057
+ )
2058
+ STATIC =
2059
+ T.let(
2060
+ :static,
2061
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
2062
+ )
2063
+ NONE =
2064
+ T.let(
2065
+ :none,
2066
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
2067
+ )
2068
+
2069
+ sig do
2070
+ override.returns(
2071
+ T::Array[
2072
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
2073
+ ]
2074
+ )
2075
+ end
2076
+ def self.values
2077
+ end
2078
+ end
2079
+
2080
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
2081
+ # not configured.
2082
+ module HumanTransferMode
2083
+ extend Revox::Internal::Type::Enum
2084
+
2085
+ TaggedSymbol =
2086
+ T.type_alias do
2087
+ T.all(
2088
+ Symbol,
2089
+ Revox::Models::CampaignListResponse::Campaign::Assistant::HumanTransferMode
2090
+ )
2091
+ end
2092
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2093
+
2094
+ WARM =
2095
+ T.let(
2096
+ :warm,
2097
+ Revox::Models::CampaignListResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
2098
+ )
2099
+ COLD =
2100
+ T.let(
2101
+ :cold,
2102
+ Revox::Models::CampaignListResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
2103
+ )
2104
+
2105
+ sig do
2106
+ override.returns(
2107
+ T::Array[
2108
+ Revox::Models::CampaignListResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
2109
+ ]
2110
+ )
2111
+ end
2112
+ def self.values
2113
+ end
2114
+ end
2115
+
2116
+ module LlmModel
2117
+ extend Revox::Internal::Type::Union
2118
+
2119
+ Variants =
2120
+ T.type_alias do
2121
+ T.any(
2122
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0,
2123
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember1,
2124
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember2,
2125
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3
2126
+ )
2127
+ end
2128
+
2129
+ class UnionMember0 < Revox::Internal::Type::BaseModel
2130
+ OrHash =
2131
+ T.type_alias do
2132
+ T.any(
2133
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0,
2134
+ Revox::Internal::AnyHash
2135
+ )
2136
+ end
2137
+
2138
+ sig do
2139
+ returns(
2140
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
2141
+ )
2142
+ end
2143
+ attr_accessor :name
2144
+
2145
+ sig { returns(Symbol) }
2146
+ attr_accessor :type
2147
+
2148
+ sig do
2149
+ params(
2150
+ name:
2151
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::OrSymbol,
2152
+ type: Symbol
2153
+ ).returns(T.attached_class)
2154
+ end
2155
+ def self.new(name:, type: :"dedicated-instance")
2156
+ end
2157
+
2158
+ sig do
2159
+ override.returns(
2160
+ {
2161
+ name:
2162
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol,
2163
+ type: Symbol
2164
+ }
2165
+ )
2166
+ end
2167
+ def to_hash
2168
+ end
2169
+
2170
+ module Name
2171
+ extend Revox::Internal::Type::Enum
2172
+
2173
+ TaggedSymbol =
2174
+ T.type_alias do
2175
+ T.all(
2176
+ Symbol,
2177
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name
2178
+ )
2179
+ end
2180
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2181
+
2182
+ GPT_4_1 =
2183
+ T.let(
2184
+ :"gpt-4.1",
2185
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
2186
+ )
2187
+ MINISTRAL_3_8B_INSTRUCT =
2188
+ T.let(
2189
+ :"ministral-3-8b-instruct",
2190
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
2191
+ )
2192
+
2193
+ sig do
2194
+ override.returns(
2195
+ T::Array[
2196
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
2197
+ ]
2198
+ )
2199
+ end
2200
+ def self.values
2201
+ end
2202
+ end
2203
+ end
2204
+
2205
+ class UnionMember1 < Revox::Internal::Type::BaseModel
2206
+ OrHash =
2207
+ T.type_alias do
2208
+ T.any(
2209
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember1,
2210
+ Revox::Internal::AnyHash
2211
+ )
2212
+ end
2213
+
2214
+ # The model ID to use from OpenRouter. eg: openai/gpt-4.1
2215
+ sig { returns(String) }
2216
+ attr_accessor :openrouter_model_id
2217
+
2218
+ # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
2219
+ sig { returns(String) }
2220
+ attr_accessor :openrouter_provider
2221
+
2222
+ # Use a model from OpenRouter.
2223
+ sig { returns(Symbol) }
2224
+ attr_accessor :type
2225
+
2226
+ sig do
2227
+ params(
2228
+ openrouter_model_id: String,
2229
+ openrouter_provider: String,
2230
+ type: Symbol
2231
+ ).returns(T.attached_class)
2232
+ end
2233
+ def self.new(
2234
+ # The model ID to use from OpenRouter. eg: openai/gpt-4.1
2235
+ openrouter_model_id:,
2236
+ # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
2237
+ openrouter_provider:,
2238
+ # Use a model from OpenRouter.
2239
+ type: :openrouter
2240
+ )
2241
+ end
2242
+
2243
+ sig do
2244
+ override.returns(
2245
+ {
2246
+ openrouter_model_id: String,
2247
+ openrouter_provider: String,
2248
+ type: Symbol
2249
+ }
2250
+ )
2251
+ end
2252
+ def to_hash
2253
+ end
2254
+ end
2255
+
2256
+ class UnionMember2 < Revox::Internal::Type::BaseModel
2257
+ OrHash =
2258
+ T.type_alias do
2259
+ T.any(
2260
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember2,
2261
+ Revox::Internal::AnyHash
2262
+ )
2263
+ end
2264
+
2265
+ # API key sent as Bearer token to the custom endpoint.
2266
+ sig { returns(String) }
2267
+ attr_accessor :api_key
2268
+
2269
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
2270
+ sig { returns(String) }
2271
+ attr_accessor :api_url
2272
+
2273
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
2274
+ sig { returns(String) }
2275
+ attr_accessor :model_name
2276
+
2277
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
2278
+ sig { returns(Symbol) }
2279
+ attr_accessor :type
2280
+
2281
+ sig do
2282
+ params(
2283
+ api_key: String,
2284
+ api_url: String,
2285
+ model_name: String,
2286
+ type: Symbol
2287
+ ).returns(T.attached_class)
2288
+ end
2289
+ def self.new(
2290
+ # API key sent as Bearer token to the custom endpoint.
2291
+ api_key:,
2292
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
2293
+ api_url:,
2294
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
2295
+ model_name:,
2296
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
2297
+ type: :custom
2298
+ )
2299
+ end
2300
+
2301
+ sig do
2302
+ override.returns(
2303
+ {
2304
+ api_key: String,
2305
+ api_url: String,
2306
+ model_name: String,
2307
+ type: Symbol
2308
+ }
2309
+ )
2310
+ end
2311
+ def to_hash
2312
+ end
2313
+ end
2314
+
2315
+ class UnionMember3 < Revox::Internal::Type::BaseModel
2316
+ OrHash =
2317
+ T.type_alias do
2318
+ T.any(
2319
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3,
2320
+ Revox::Internal::AnyHash
2321
+ )
2322
+ end
2323
+
2324
+ # The provider to use from Realtime. eg: openai, google.
2325
+ sig do
2326
+ returns(
2327
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2328
+ )
2329
+ end
2330
+ attr_accessor :provider
2331
+
2332
+ # The model ID to use from Realtime. eg: gpt-4.1
2333
+ sig { returns(String) }
2334
+ attr_accessor :realtime_model_id
2335
+
2336
+ # Use a model from Realtime.
2337
+ sig { returns(Symbol) }
2338
+ attr_accessor :type
2339
+
2340
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
2341
+ sig { returns(T.nilable(String)) }
2342
+ attr_reader :realtime_voice_id
2343
+
2344
+ sig { params(realtime_voice_id: String).void }
2345
+ attr_writer :realtime_voice_id
2346
+
2347
+ sig do
2348
+ params(
2349
+ provider:
2350
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::OrSymbol,
2351
+ realtime_model_id: String,
2352
+ realtime_voice_id: String,
2353
+ type: Symbol
2354
+ ).returns(T.attached_class)
2355
+ end
2356
+ def self.new(
2357
+ # The provider to use from Realtime. eg: openai, google.
2358
+ provider:,
2359
+ # The model ID to use from Realtime. eg: gpt-4.1
2360
+ realtime_model_id:,
2361
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
2362
+ realtime_voice_id: nil,
2363
+ # Use a model from Realtime.
2364
+ type: :realtime
2365
+ )
2366
+ end
2367
+
2368
+ sig do
2369
+ override.returns(
2370
+ {
2371
+ provider:
2372
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol,
2373
+ realtime_model_id: String,
2374
+ type: Symbol,
2375
+ realtime_voice_id: String
2376
+ }
2377
+ )
2378
+ end
2379
+ def to_hash
2380
+ end
2381
+
2382
+ # The provider to use from Realtime. eg: openai, google.
2383
+ module Provider
2384
+ extend Revox::Internal::Type::Enum
2385
+
2386
+ TaggedSymbol =
2387
+ T.type_alias do
2388
+ T.all(
2389
+ Symbol,
2390
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider
2391
+ )
2392
+ end
2393
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2394
+
2395
+ OPENAI =
2396
+ T.let(
2397
+ :openai,
2398
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2399
+ )
2400
+ GOOGLE =
2401
+ T.let(
2402
+ :google,
2403
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2404
+ )
2405
+
2406
+ sig do
2407
+ override.returns(
2408
+ T::Array[
2409
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2410
+ ]
2411
+ )
2412
+ end
2413
+ def self.values
2414
+ end
2415
+ end
2416
+ end
2417
+
2418
+ sig do
2419
+ override.returns(
2420
+ T::Array[
2421
+ Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::Variants
2422
+ ]
2423
+ )
2424
+ end
2425
+ def self.variants
2426
+ end
2427
+ end
2428
+
2429
+ class Position < Revox::Internal::Type::BaseModel
2430
+ OrHash =
2431
+ T.type_alias do
2432
+ T.any(
2433
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Position,
2434
+ Revox::Internal::AnyHash
2435
+ )
2436
+ end
2437
+
2438
+ sig { returns(Float) }
2439
+ attr_accessor :x
2440
+
2441
+ sig { returns(Float) }
2442
+ attr_accessor :y_
2443
+
2444
+ sig { params(x: Float, y_: Float).returns(T.attached_class) }
2445
+ def self.new(x:, y_:)
2446
+ end
2447
+
2448
+ sig { override.returns({ x: Float, y_: Float }) }
2449
+ def to_hash
2450
+ end
2451
+ end
2452
+
2453
+ class PromptFlow < Revox::Internal::Type::BaseModel
2454
+ OrHash =
2455
+ T.type_alias do
2456
+ T.any(
2457
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow,
2458
+ Revox::Internal::AnyHash
2459
+ )
2460
+ end
2461
+
2462
+ sig do
2463
+ returns(
2464
+ T::Array[
2465
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Edge
2466
+ ]
2467
+ )
2468
+ end
2469
+ attr_accessor :edges
2470
+
2471
+ sig do
2472
+ returns(
2473
+ T::Array[
2474
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node
2475
+ ]
2476
+ )
2477
+ end
2478
+ attr_accessor :nodes
2479
+
2480
+ sig do
2481
+ params(
2482
+ edges:
2483
+ T::Array[
2484
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Edge::OrHash
2485
+ ],
2486
+ nodes:
2487
+ T::Array[
2488
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::OrHash
2489
+ ]
2490
+ ).returns(T.attached_class)
2491
+ end
2492
+ def self.new(edges:, nodes:)
2493
+ end
2494
+
2495
+ sig do
2496
+ override.returns(
2497
+ {
2498
+ edges:
2499
+ T::Array[
2500
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Edge
2501
+ ],
2502
+ nodes:
2503
+ T::Array[
2504
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node
2505
+ ]
2506
+ }
2507
+ )
2508
+ end
2509
+ def to_hash
2510
+ end
2511
+
2512
+ class Edge < Revox::Internal::Type::BaseModel
2513
+ OrHash =
2514
+ T.type_alias do
2515
+ T.any(
2516
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Edge,
2517
+ Revox::Internal::AnyHash
2518
+ )
2519
+ end
2520
+
2521
+ sig { returns(String) }
2522
+ attr_accessor :id
2523
+
2524
+ sig { returns(String) }
2525
+ attr_accessor :source
2526
+
2527
+ sig { returns(String) }
2528
+ attr_accessor :target
2529
+
2530
+ sig do
2531
+ params(id: String, source: String, target: String).returns(
2532
+ T.attached_class
2533
+ )
2534
+ end
2535
+ def self.new(id:, source:, target:)
2536
+ end
2537
+
2538
+ sig do
2539
+ override.returns({ id: String, source: String, target: String })
2540
+ end
2541
+ def to_hash
2542
+ end
2543
+ end
2544
+
2545
+ class Node < Revox::Internal::Type::BaseModel
2546
+ OrHash =
2547
+ T.type_alias do
2548
+ T.any(
2549
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node,
2550
+ Revox::Internal::AnyHash
2551
+ )
2552
+ end
2553
+
2554
+ sig { returns(String) }
2555
+ attr_accessor :id
2556
+
2557
+ sig do
2558
+ returns(
2559
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Data
2560
+ )
2561
+ end
2562
+ attr_reader :data
2563
+
2564
+ sig do
2565
+ params(
2566
+ data:
2567
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Data::OrHash
2568
+ ).void
2569
+ end
2570
+ attr_writer :data
2571
+
2572
+ sig do
2573
+ returns(
2574
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Position
2575
+ )
2576
+ end
2577
+ attr_reader :position
2578
+
2579
+ sig do
2580
+ params(
2581
+ position:
2582
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Position::OrHash
2583
+ ).void
2584
+ end
2585
+ attr_writer :position
2586
+
2587
+ sig { returns(Symbol) }
2588
+ attr_accessor :type
2589
+
2590
+ sig do
2591
+ params(
2592
+ id: String,
2593
+ data:
2594
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Data::OrHash,
2595
+ position:
2596
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Position::OrHash,
2597
+ type: Symbol
2598
+ ).returns(T.attached_class)
2599
+ end
2600
+ def self.new(id:, data:, position:, type: :promptBlock)
2601
+ end
2602
+
2603
+ sig do
2604
+ override.returns(
2605
+ {
2606
+ id: String,
2607
+ data:
2608
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Data,
2609
+ position:
2610
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Position,
2611
+ type: Symbol
2612
+ }
2613
+ )
2614
+ end
2615
+ def to_hash
2616
+ end
2617
+
2618
+ class Data < Revox::Internal::Type::BaseModel
2619
+ OrHash =
2620
+ T.type_alias do
2621
+ T.any(
2622
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Data,
2623
+ Revox::Internal::AnyHash
2624
+ )
2625
+ end
2626
+
2627
+ sig { returns(String) }
2628
+ attr_accessor :body
2629
+
2630
+ sig { returns(String) }
2631
+ attr_accessor :title
2632
+
2633
+ sig do
2634
+ params(body: String, title: String).returns(T.attached_class)
2635
+ end
2636
+ def self.new(body:, title:)
2637
+ end
2638
+
2639
+ sig { override.returns({ body: String, title: String }) }
2640
+ def to_hash
2641
+ end
2642
+ end
2643
+
2644
+ class Position < Revox::Internal::Type::BaseModel
2645
+ OrHash =
2646
+ T.type_alias do
2647
+ T.any(
2648
+ Revox::Models::CampaignListResponse::Campaign::Assistant::PromptFlow::Node::Position,
2649
+ Revox::Internal::AnyHash
2650
+ )
2651
+ end
2652
+
2653
+ sig { returns(Float) }
2654
+ attr_accessor :x
2655
+
2656
+ sig { returns(Float) }
2657
+ attr_accessor :y_
2658
+
2659
+ sig { params(x: Float, y_: Float).returns(T.attached_class) }
2660
+ def self.new(x:, y_:)
2661
+ end
2662
+
2663
+ sig { override.returns({ x: Float, y_: Float }) }
2664
+ def to_hash
2665
+ end
2666
+ end
2667
+ end
2668
+ end
2669
+
2670
+ class Slack < Revox::Internal::Type::BaseModel
2671
+ OrHash =
2672
+ T.type_alias do
2673
+ T.any(
2674
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack,
2675
+ Revox::Internal::AnyHash
2676
+ )
2677
+ end
2678
+
2679
+ # The Slack channel ID where the notification will be posted.
2680
+ sig { returns(String) }
2681
+ attr_accessor :channel_id
2682
+
2683
+ # The Nango connection ID linking the org's Slack workspace to Revox.
2684
+ sig { returns(String) }
2685
+ attr_accessor :connection_id
2686
+
2687
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2688
+ # Use 'none' to notify when outcome is null.
2689
+ sig do
2690
+ returns(
2691
+ T::Array[
2692
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2693
+ ]
2694
+ )
2695
+ end
2696
+ attr_accessor :outcomes
2697
+
2698
+ # Human-readable Slack channel name, cached for display in the UI.
2699
+ sig { returns(T.nilable(String)) }
2700
+ attr_accessor :channel_name
2701
+
2702
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2703
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2704
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2705
+ # prompt_variables and structured_output keys. When null/empty a default template
2706
+ # is used.
2707
+ sig { returns(T.nilable(String)) }
2708
+ attr_accessor :template
2709
+
2710
+ sig do
2711
+ params(
2712
+ channel_id: String,
2713
+ connection_id: String,
2714
+ outcomes:
2715
+ T::Array[
2716
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::OrSymbol
2717
+ ],
2718
+ channel_name: T.nilable(String),
2719
+ template: T.nilable(String)
2720
+ ).returns(T.attached_class)
2721
+ end
2722
+ def self.new(
2723
+ # The Slack channel ID where the notification will be posted.
2724
+ channel_id:,
2725
+ # The Nango connection ID linking the org's Slack workspace to Revox.
2726
+ connection_id:,
2727
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2728
+ # Use 'none' to notify when outcome is null.
2729
+ outcomes:,
2730
+ # Human-readable Slack channel name, cached for display in the UI.
2731
+ channel_name: nil,
2732
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2733
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2734
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2735
+ # prompt_variables and structured_output keys. When null/empty a default template
2736
+ # is used.
2737
+ template: nil
2738
+ )
2739
+ end
2740
+
2741
+ sig do
2742
+ override.returns(
2743
+ {
2744
+ channel_id: String,
2745
+ connection_id: String,
2746
+ outcomes:
2747
+ T::Array[
2748
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2749
+ ],
2750
+ channel_name: T.nilable(String),
2751
+ template: T.nilable(String)
2752
+ }
2753
+ )
2754
+ end
2755
+ def to_hash
2756
+ end
2757
+
2758
+ module Outcome
2759
+ extend Revox::Internal::Type::Enum
2760
+
2761
+ TaggedSymbol =
2762
+ T.type_alias do
2763
+ T.all(
2764
+ Symbol,
2765
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome
2766
+ )
2767
+ end
2768
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2769
+
2770
+ NOT_INTERESTED =
2771
+ T.let(
2772
+ :not_interested,
2773
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2774
+ )
2775
+ INTERESTED =
2776
+ T.let(
2777
+ :interested,
2778
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2779
+ )
2780
+ COMPLETED =
2781
+ T.let(
2782
+ :completed,
2783
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2784
+ )
2785
+ REQUESTED_CALLBACK_LATER =
2786
+ T.let(
2787
+ :requested_callback_later,
2788
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2789
+ )
2790
+ REQUESTED_CALLBACK_NEW_NUMBER =
2791
+ T.let(
2792
+ :requested_callback_new_number,
2793
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2794
+ )
2795
+ DO_NOT_CONTACT =
2796
+ T.let(
2797
+ :do_not_contact,
2798
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2799
+ )
2800
+ AI_AVERSE =
2801
+ T.let(
2802
+ :ai_averse,
2803
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2804
+ )
2805
+ NONE =
2806
+ T.let(
2807
+ :none,
2808
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2809
+ )
2810
+
2811
+ sig do
2812
+ override.returns(
2813
+ T::Array[
2814
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2815
+ ]
2816
+ )
2817
+ end
2818
+ def self.values
2819
+ end
2820
+ end
2821
+ end
2822
+
2823
+ class StructuredOutputConfig < Revox::Internal::Type::BaseModel
2824
+ OrHash =
2825
+ T.type_alias do
2826
+ T.any(
2827
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig,
2828
+ Revox::Internal::AnyHash
2829
+ )
2830
+ end
2831
+
2832
+ sig { returns(String) }
2833
+ attr_accessor :name
2834
+
2835
+ sig { returns(T::Boolean) }
2836
+ attr_accessor :required
2837
+
2838
+ sig do
2839
+ returns(
2840
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2841
+ )
2842
+ end
2843
+ attr_accessor :type
2844
+
2845
+ sig { returns(T.nilable(String)) }
2846
+ attr_reader :description
2847
+
2848
+ sig { params(description: String).void }
2849
+ attr_writer :description
2850
+
2851
+ sig { returns(T.nilable(T::Array[String])) }
2852
+ attr_reader :enum_options
2853
+
2854
+ sig { params(enum_options: T::Array[String]).void }
2855
+ attr_writer :enum_options
2856
+
2857
+ sig do
2858
+ params(
2859
+ name: String,
2860
+ required: T::Boolean,
2861
+ type:
2862
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::OrSymbol,
2863
+ description: String,
2864
+ enum_options: T::Array[String]
2865
+ ).returns(T.attached_class)
2866
+ end
2867
+ def self.new(
2868
+ name:,
2869
+ required:,
2870
+ type:,
2871
+ description: nil,
2872
+ enum_options: nil
2873
+ )
2874
+ end
2875
+
2876
+ sig do
2877
+ override.returns(
2878
+ {
2879
+ name: String,
2880
+ required: T::Boolean,
2881
+ type:
2882
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol,
2883
+ description: String,
2884
+ enum_options: T::Array[String]
2885
+ }
2886
+ )
2887
+ end
2888
+ def to_hash
2889
+ end
2890
+
2891
+ module Type
2892
+ extend Revox::Internal::Type::Enum
2893
+
2894
+ TaggedSymbol =
2895
+ T.type_alias do
2896
+ T.all(
2897
+ Symbol,
2898
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type
2899
+ )
2900
+ end
2901
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2902
+
2903
+ STRING =
2904
+ T.let(
2905
+ :string,
2906
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2907
+ )
2908
+ NUMBER =
2909
+ T.let(
2910
+ :number,
2911
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2912
+ )
2913
+ BOOLEAN =
2914
+ T.let(
2915
+ :boolean,
2916
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2917
+ )
2918
+ ENUM =
2919
+ T.let(
2920
+ :enum,
2921
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2922
+ )
2923
+ DATE =
2924
+ T.let(
2925
+ :date,
2926
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2927
+ )
2928
+ DATETIME =
2929
+ T.let(
2930
+ :datetime,
2931
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2932
+ )
2933
+
2934
+ sig do
2935
+ override.returns(
2936
+ T::Array[
2937
+ Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2938
+ ]
2939
+ )
2940
+ end
2941
+ def self.values
2942
+ end
2943
+ end
2944
+ end
2945
+
2946
+ class SttContext < Revox::Internal::Type::BaseModel
2947
+ OrHash =
2948
+ T.type_alias do
2949
+ T.any(
2950
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttContext,
2951
+ Revox::Internal::AnyHash
2952
+ )
2953
+ end
2954
+
2955
+ sig do
2956
+ returns(
2957
+ T::Array[
2958
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttContext::General
2959
+ ]
2960
+ )
2961
+ end
2962
+ attr_accessor :general
2963
+
2964
+ sig { returns(T::Array[String]) }
2965
+ attr_accessor :terms
2966
+
2967
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
2968
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
2969
+ # replacing existing entries.
2970
+ sig do
2971
+ params(
2972
+ general:
2973
+ T::Array[
2974
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttContext::General::OrHash
2975
+ ],
2976
+ terms: T::Array[String]
2977
+ ).returns(T.attached_class)
2978
+ end
2979
+ def self.new(general:, terms:)
2980
+ end
2981
+
2982
+ sig do
2983
+ override.returns(
2984
+ {
2985
+ general:
2986
+ T::Array[
2987
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttContext::General
2988
+ ],
2989
+ terms: T::Array[String]
2990
+ }
2991
+ )
2992
+ end
2993
+ def to_hash
2994
+ end
2995
+
2996
+ class General < Revox::Internal::Type::BaseModel
2997
+ OrHash =
2998
+ T.type_alias do
2999
+ T.any(
3000
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttContext::General,
3001
+ Revox::Internal::AnyHash
3002
+ )
3003
+ end
3004
+
3005
+ sig { returns(String) }
3006
+ attr_accessor :key
3007
+
3008
+ sig { returns(String) }
3009
+ attr_accessor :value
3010
+
3011
+ sig do
3012
+ params(key: String, value: String).returns(T.attached_class)
3013
+ end
3014
+ def self.new(key:, value:)
3015
+ end
3016
+
3017
+ sig { override.returns({ key: String, value: String }) }
3018
+ def to_hash
3019
+ end
3020
+ end
3021
+ end
3022
+
3023
+ # Transcriber (speech-to-text) model used for the assistant.
3024
+ module SttModel
3025
+ extend Revox::Internal::Type::Enum
3026
+
3027
+ TaggedSymbol =
3028
+ T.type_alias do
3029
+ T.all(
3030
+ Symbol,
3031
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttModel
3032
+ )
3033
+ end
3034
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3035
+
3036
+ STT_RT_V4 =
3037
+ T.let(
3038
+ :"stt-rt-v4",
3039
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttModel::TaggedSymbol
3040
+ )
3041
+ STT_RT_V5 =
3042
+ T.let(
3043
+ :"stt-rt-v5",
3044
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttModel::TaggedSymbol
3045
+ )
3046
+
3047
+ sig do
3048
+ override.returns(
3049
+ T::Array[
3050
+ Revox::Models::CampaignListResponse::Campaign::Assistant::SttModel::TaggedSymbol
3051
+ ]
3052
+ )
3053
+ end
3054
+ def self.values
3055
+ end
3056
+ end
3057
+
3058
+ # Audio clip to play while the agent is processing a response. One of the built-in
3059
+ # LiveKit audio clips; null disables it.
3060
+ module ThinkingSound
3061
+ extend Revox::Internal::Type::Enum
3062
+
3063
+ TaggedSymbol =
3064
+ T.type_alias do
3065
+ T.all(
3066
+ Symbol,
3067
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound
3068
+ )
3069
+ end
3070
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3071
+
3072
+ CITY_AMBIENCE_OGG =
3073
+ T.let(
3074
+ :"city-ambience.ogg",
3075
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3076
+ )
3077
+ FOREST_AMBIENCE_OGG =
3078
+ T.let(
3079
+ :"forest-ambience.ogg",
3080
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3081
+ )
3082
+ OFFICE_AMBIENCE_OGG =
3083
+ T.let(
3084
+ :"office-ambience.ogg",
3085
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3086
+ )
3087
+ CROWDED_ROOM_OGG =
3088
+ T.let(
3089
+ :"crowded-room.ogg",
3090
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3091
+ )
3092
+ KEYBOARD_TYPING_OGG =
3093
+ T.let(
3094
+ :"keyboard-typing.ogg",
3095
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3096
+ )
3097
+ KEYBOARD_TYPING2_OGG =
3098
+ T.let(
3099
+ :"keyboard-typing2.ogg",
3100
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3101
+ )
3102
+ HOLD_MUSIC_OGG =
3103
+ T.let(
3104
+ :"hold_music.ogg",
3105
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3106
+ )
3107
+
3108
+ sig do
3109
+ override.returns(
3110
+ T::Array[
3111
+ Revox::Models::CampaignListResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3112
+ ]
3113
+ )
3114
+ end
3115
+ def self.values
3116
+ end
3117
+ end
3118
+
3119
+ module Type
3120
+ extend Revox::Internal::Type::Enum
3121
+
3122
+ TaggedSymbol =
3123
+ T.type_alias do
3124
+ T.all(
3125
+ Symbol,
3126
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type
3127
+ )
3128
+ end
3129
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3130
+
3131
+ STANDALONE =
3132
+ T.let(
3133
+ :standalone,
3134
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::TaggedSymbol
3135
+ )
3136
+ MULTI_STEP =
3137
+ T.let(
3138
+ :"multi-step",
3139
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::TaggedSymbol
3140
+ )
3141
+ SUB_ASSISTANT =
3142
+ T.let(
3143
+ :"sub-assistant",
3144
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::TaggedSymbol
3145
+ )
3146
+
3147
+ sig do
3148
+ override.returns(
3149
+ T::Array[
3150
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::TaggedSymbol
3151
+ ]
3152
+ )
3153
+ end
3154
+ def self.values
3155
+ end
3156
+ end
3157
+
3158
+ class Voice < Revox::Internal::Type::BaseModel
3159
+ OrHash =
3160
+ T.type_alias do
3161
+ T.any(
3162
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice,
3163
+ Revox::Internal::AnyHash
3164
+ )
3165
+ end
3166
+
3167
+ # The ID of the voice.
3168
+ sig { returns(String) }
3169
+ attr_accessor :id
3170
+
3171
+ # The provider of the voice.
3172
+ sig do
3173
+ returns(
3174
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3175
+ )
3176
+ end
3177
+ attr_accessor :provider
3178
+
3179
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
3180
+ # for other providers.
3181
+ sig do
3182
+ returns(
3183
+ T.nilable(
3184
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Model::TaggedSymbol
3185
+ )
3186
+ )
3187
+ end
3188
+ attr_reader :model
3189
+
3190
+ sig do
3191
+ params(
3192
+ model:
3193
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Model::OrSymbol
3194
+ ).void
3195
+ end
3196
+ attr_writer :model
3197
+
3198
+ # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3199
+ # 0.7–1.2. Default is 1.0.
3200
+ sig { returns(T.nilable(Float)) }
3201
+ attr_reader :speed
3202
+
3203
+ sig { params(speed: Float).void }
3204
+ attr_writer :speed
3205
+
3206
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
3207
+ # providers.
3208
+ sig { returns(T.nilable(Float)) }
3209
+ attr_reader :volume
3210
+
3211
+ sig { params(volume: Float).void }
3212
+ attr_writer :volume
3213
+
3214
+ sig do
3215
+ params(
3216
+ id: String,
3217
+ provider:
3218
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::OrSymbol,
3219
+ model:
3220
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Model::OrSymbol,
3221
+ speed: Float,
3222
+ volume: Float
3223
+ ).returns(T.attached_class)
3224
+ end
3225
+ def self.new(
3226
+ # The ID of the voice.
3227
+ id:,
3228
+ # The provider of the voice.
3229
+ provider:,
3230
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
3231
+ # for other providers.
3232
+ model: nil,
3233
+ # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3234
+ # 0.7–1.2. Default is 1.0.
3235
+ speed: nil,
3236
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
3237
+ # providers.
3238
+ volume: nil
3239
+ )
3240
+ end
3241
+
3242
+ sig do
3243
+ override.returns(
3244
+ {
3245
+ id: String,
3246
+ provider:
3247
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol,
3248
+ model:
3249
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Model::TaggedSymbol,
3250
+ speed: Float,
3251
+ volume: Float
3252
+ }
3253
+ )
3254
+ end
3255
+ def to_hash
3256
+ end
3257
+
3258
+ # The provider of the voice.
3259
+ module Provider
3260
+ extend Revox::Internal::Type::Enum
3261
+
3262
+ TaggedSymbol =
3263
+ T.type_alias do
3264
+ T.all(
3265
+ Symbol,
3266
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider
3267
+ )
3268
+ end
3269
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3270
+
3271
+ CARTESIA =
3272
+ T.let(
3273
+ :cartesia,
3274
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3275
+ )
3276
+ ELEVENLABS =
3277
+ T.let(
3278
+ :elevenlabs,
3279
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3280
+ )
3281
+
3282
+ sig do
3283
+ override.returns(
3284
+ T::Array[
3285
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3286
+ ]
3287
+ )
3288
+ end
3289
+ def self.values
3290
+ end
3291
+ end
3292
+
3293
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
3294
+ # for other providers.
3295
+ module Model
3296
+ extend Revox::Internal::Type::Enum
3297
+
3298
+ TaggedSymbol =
3299
+ T.type_alias do
3300
+ T.all(
3301
+ Symbol,
3302
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Model
3303
+ )
3304
+ end
3305
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3306
+
3307
+ SONIC_3 =
3308
+ T.let(
3309
+ :"sonic-3",
3310
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Model::TaggedSymbol
3311
+ )
3312
+ SONIC_3_5 =
3313
+ T.let(
3314
+ :"sonic-3.5",
3315
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Model::TaggedSymbol
3316
+ )
3317
+
3318
+ sig do
3319
+ override.returns(
3320
+ T::Array[
3321
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Model::TaggedSymbol
3322
+ ]
3323
+ )
3324
+ end
3325
+ def self.values
3326
+ end
3327
+ end
3328
+ end
3329
+
3330
+ class Zoho < Revox::Internal::Type::BaseModel
3331
+ OrHash =
3332
+ T.type_alias do
3333
+ T.any(
3334
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho,
3335
+ Revox::Internal::AnyHash
3336
+ )
3337
+ end
3338
+
3339
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
3340
+ sig { returns(String) }
3341
+ attr_accessor :connection_id
3342
+
3343
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
3344
+ # field API names on the upserted record.
3345
+ sig do
3346
+ returns(
3347
+ T::Array[
3348
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::FieldMapping
3349
+ ]
3350
+ )
3351
+ end
3352
+ attr_accessor :field_mapping
3353
+
3354
+ # When true, also log the call as a record in Zoho's Calls module (related to the
3355
+ # upserted prospect via Who_Id).
3356
+ sig { returns(T::Boolean) }
3357
+ attr_accessor :log_call_activity
3358
+
3359
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
3360
+ sig { returns(String) }
3361
+ attr_accessor :module_
3362
+
3363
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
3364
+ # 'none' to push when outcome is null.
3365
+ sig do
3366
+ returns(
3367
+ T::Array[
3368
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3369
+ ]
3370
+ )
3371
+ end
3372
+ attr_accessor :outcomes
3373
+
3374
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
3375
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
3376
+ # prompt_variables and structured_output keys. When null/empty a default note
3377
+ # (outcome + summary + auto-listed extracted fields) is used.
3378
+ sig { returns(T.nilable(String)) }
3379
+ attr_accessor :template
3380
+
3381
+ sig do
3382
+ params(
3383
+ connection_id: String,
3384
+ field_mapping:
3385
+ T::Array[
3386
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::FieldMapping::OrHash
3387
+ ],
3388
+ log_call_activity: T::Boolean,
3389
+ module_: String,
3390
+ outcomes:
3391
+ T::Array[
3392
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::OrSymbol
3393
+ ],
3394
+ template: T.nilable(String)
3395
+ ).returns(T.attached_class)
3396
+ end
3397
+ def self.new(
3398
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
3399
+ connection_id:,
3400
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
3401
+ # field API names on the upserted record.
3402
+ field_mapping:,
3403
+ # When true, also log the call as a record in Zoho's Calls module (related to the
3404
+ # upserted prospect via Who_Id).
3405
+ log_call_activity:,
3406
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
3407
+ module_:,
3408
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
3409
+ # 'none' to push when outcome is null.
3410
+ outcomes:,
3411
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
3412
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
3413
+ # prompt_variables and structured_output keys. When null/empty a default note
3414
+ # (outcome + summary + auto-listed extracted fields) is used.
3415
+ template: nil
3416
+ )
3417
+ end
3418
+
3419
+ sig do
3420
+ override.returns(
3421
+ {
3422
+ connection_id: String,
3423
+ field_mapping:
3424
+ T::Array[
3425
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::FieldMapping
3426
+ ],
3427
+ log_call_activity: T::Boolean,
3428
+ module_: String,
3429
+ outcomes:
3430
+ T::Array[
3431
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3432
+ ],
3433
+ template: T.nilable(String)
3434
+ }
3435
+ )
3436
+ end
3437
+ def to_hash
3438
+ end
3439
+
3440
+ class FieldMapping < Revox::Internal::Type::BaseModel
3441
+ OrHash =
3442
+ T.type_alias do
3443
+ T.any(
3444
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::FieldMapping,
3445
+ Revox::Internal::AnyHash
3446
+ )
3447
+ end
3448
+
3449
+ # Source key to read from the call: a structured_output field name, falling back
3450
+ # to a prompt variable of the same name.
3451
+ sig { returns(String) }
3452
+ attr_accessor :source
3453
+
3454
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
3455
+ # or a custom 'Budget\_\_c').
3456
+ sig { returns(String) }
3457
+ attr_accessor :zoho_field
3458
+
3459
+ sig do
3460
+ params(source: String, zoho_field: String).returns(
3461
+ T.attached_class
3462
+ )
3463
+ end
3464
+ def self.new(
3465
+ # Source key to read from the call: a structured_output field name, falling back
3466
+ # to a prompt variable of the same name.
3467
+ source:,
3468
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
3469
+ # or a custom 'Budget\_\_c').
3470
+ zoho_field:
3471
+ )
3472
+ end
3473
+
3474
+ sig { override.returns({ source: String, zoho_field: String }) }
3475
+ def to_hash
3476
+ end
3477
+ end
3478
+
3479
+ module Outcome
3480
+ extend Revox::Internal::Type::Enum
3481
+
3482
+ TaggedSymbol =
3483
+ T.type_alias do
3484
+ T.all(
3485
+ Symbol,
3486
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome
3487
+ )
3488
+ end
3489
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3490
+
3491
+ NOT_INTERESTED =
3492
+ T.let(
3493
+ :not_interested,
3494
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3495
+ )
3496
+ INTERESTED =
3497
+ T.let(
3498
+ :interested,
3499
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3500
+ )
3501
+ COMPLETED =
3502
+ T.let(
3503
+ :completed,
3504
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3505
+ )
3506
+ REQUESTED_CALLBACK_LATER =
3507
+ T.let(
3508
+ :requested_callback_later,
3509
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3510
+ )
3511
+ REQUESTED_CALLBACK_NEW_NUMBER =
3512
+ T.let(
3513
+ :requested_callback_new_number,
3514
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3515
+ )
3516
+ DO_NOT_CONTACT =
3517
+ T.let(
3518
+ :do_not_contact,
3519
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3520
+ )
3521
+ AI_AVERSE =
3522
+ T.let(
3523
+ :ai_averse,
3524
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3525
+ )
3526
+ NONE =
3527
+ T.let(
3528
+ :none,
3529
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3530
+ )
3531
+
3532
+ sig do
3533
+ override.returns(
3534
+ T::Array[
3535
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3536
+ ]
3537
+ )
3538
+ end
3539
+ def self.values
3540
+ end
3541
+ end
3542
+ end
3543
+
3544
+ class CreatedBy < Revox::Internal::Type::BaseModel
3545
+ OrHash =
3546
+ T.type_alias do
3547
+ T.any(
3548
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CreatedBy,
3549
+ Revox::Internal::AnyHash
3550
+ )
3551
+ end
3552
+
3553
+ # The database user id of the creator.
3554
+ sig { returns(String) }
3555
+ attr_accessor :id
3556
+
3557
+ sig { returns(String) }
3558
+ attr_accessor :email
3559
+
3560
+ sig { returns(T.nilable(String)) }
3561
+ attr_accessor :first_name
3562
+
3563
+ sig { returns(T.nilable(String)) }
3564
+ attr_accessor :last_name
3565
+
3566
+ # The user who created the assistant.
3567
+ sig do
3568
+ params(
3569
+ id: String,
3570
+ email: String,
3571
+ first_name: T.nilable(String),
3572
+ last_name: T.nilable(String)
3573
+ ).returns(T.attached_class)
3574
+ end
3575
+ def self.new(
3576
+ # The database user id of the creator.
3577
+ id:,
3578
+ email:,
3579
+ first_name:,
3580
+ last_name:
3581
+ )
3582
+ end
3583
+
3584
+ sig do
3585
+ override.returns(
3586
+ {
3587
+ id: String,
3588
+ email: String,
3589
+ first_name: T.nilable(String),
3590
+ last_name: T.nilable(String)
3591
+ }
3592
+ )
3593
+ end
3594
+ def to_hash
3595
+ end
3596
+ end
3597
+
3598
+ class FaqItem < Revox::Internal::Type::BaseModel
3599
+ OrHash =
3600
+ T.type_alias do
3601
+ T.any(
3602
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem,
3603
+ Revox::Internal::AnyHash
3604
+ )
3605
+ end
3606
+
3607
+ sig { returns(String) }
3608
+ attr_accessor :answer
3609
+
3610
+ sig { returns(String) }
3611
+ attr_accessor :question
3612
+
3613
+ sig { returns(T.nilable(String)) }
3614
+ attr_reader :id
3615
+
3616
+ sig { params(id: String).void }
3617
+ attr_writer :id
3618
+
3619
+ sig { returns(T.nilable(T::Boolean)) }
3620
+ attr_reader :needs_human_answer
3621
+
3622
+ sig { params(needs_human_answer: T::Boolean).void }
3623
+ attr_writer :needs_human_answer
3624
+
3625
+ sig do
3626
+ returns(
3627
+ T.nilable(
3628
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::Source::TaggedSymbol
3629
+ )
3630
+ )
3631
+ end
3632
+ attr_reader :source
3633
+
3634
+ sig do
3635
+ params(
3636
+ source:
3637
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::Source::OrSymbol
3638
+ ).void
3639
+ end
3640
+ attr_writer :source
3641
+
3642
+ sig do
3643
+ params(
3644
+ answer: String,
3645
+ question: String,
3646
+ id: String,
3647
+ needs_human_answer: T::Boolean,
3648
+ source:
3649
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::Source::OrSymbol
3650
+ ).returns(T.attached_class)
3651
+ end
3652
+ def self.new(
3653
+ answer:,
3654
+ question:,
3655
+ id: nil,
3656
+ needs_human_answer: nil,
3657
+ source: nil
3658
+ )
3659
+ end
3660
+
3661
+ sig do
3662
+ override.returns(
3663
+ {
3664
+ answer: String,
3665
+ question: String,
3666
+ id: String,
3667
+ needs_human_answer: T::Boolean,
3668
+ source:
3669
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::Source::TaggedSymbol
3670
+ }
3671
+ )
3672
+ end
3673
+ def to_hash
3674
+ end
3675
+
3676
+ module Source
3677
+ extend Revox::Internal::Type::Enum
3678
+
3679
+ TaggedSymbol =
3680
+ T.type_alias do
3681
+ T.all(
3682
+ Symbol,
3683
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::Source
3684
+ )
3685
+ end
3686
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3687
+
3688
+ HUMAN =
3689
+ T.let(
3690
+ :human,
3691
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::Source::TaggedSymbol
3692
+ )
3693
+ AI =
3694
+ T.let(
3695
+ :ai,
3696
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::Source::TaggedSymbol
3697
+ )
3698
+
3699
+ sig do
3700
+ override.returns(
3701
+ T::Array[
3702
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::Source::TaggedSymbol
3703
+ ]
3704
+ )
3705
+ end
3706
+ def self.values
3707
+ end
3708
+ end
3709
+ end
3710
+ end
3711
+
3712
+ class CallRetryConfig < Revox::Internal::Type::BaseModel
3713
+ OrHash =
3714
+ T.type_alias do
3715
+ T.any(
3716
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig,
3717
+ Revox::Internal::AnyHash
3718
+ )
3719
+ end
3720
+
3721
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
3722
+ # Monday through Friday.
3723
+ sig do
3724
+ returns(
3725
+ T::Array[
3726
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3727
+ ]
3728
+ )
3729
+ end
3730
+ attr_accessor :allowed_days
3731
+
3732
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
3733
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
3734
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
3735
+ # Default: false.
3736
+ sig { returns(T::Boolean) }
3737
+ attr_accessor :call_twice_in_a_row
3738
+
3739
+ sig do
3740
+ returns(
3741
+ T::Array[
3742
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::CallingWindow
3743
+ ]
3744
+ )
3745
+ end
3746
+ attr_accessor :calling_windows
3747
+
3748
+ # Maximum number of call retry attempts. Default: 3.
3749
+ sig { returns(Integer) }
3750
+ attr_accessor :max_retry_attempts
3751
+
3752
+ # Optional IANA timezone identifier to override the automatic timezone detection
3753
+ # from phone number. If not provided, timezone is determined from the recipient's
3754
+ # phone number country code. Examples: 'America/New_York', 'Europe/Paris'.
3755
+ sig { returns(T.nilable(String)) }
3756
+ attr_accessor :timezone
3757
+
3758
+ # Configuration for call retry behavior including time windows, delays, and max
3759
+ # iterations. If not provided, defaults will be used.
3760
+ sig do
3761
+ params(
3762
+ allowed_days:
3763
+ T::Array[
3764
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::OrSymbol
3765
+ ],
3766
+ call_twice_in_a_row: T::Boolean,
3767
+ calling_windows:
3768
+ T::Array[
3769
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::CallingWindow::OrHash
3770
+ ],
3771
+ max_retry_attempts: Integer,
3772
+ timezone: T.nilable(String)
3773
+ ).returns(T.attached_class)
3774
+ end
3775
+ def self.new(
3776
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
3777
+ # Monday through Friday.
3778
+ allowed_days:,
3779
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
3780
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
3781
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
3782
+ # Default: false.
3783
+ call_twice_in_a_row:,
3784
+ calling_windows:,
3785
+ # Maximum number of call retry attempts. Default: 3.
3786
+ max_retry_attempts:,
3787
+ # Optional IANA timezone identifier to override the automatic timezone detection
3788
+ # from phone number. If not provided, timezone is determined from the recipient's
3789
+ # phone number country code. Examples: 'America/New_York', 'Europe/Paris'.
3790
+ timezone: nil
3791
+ )
3792
+ end
3793
+
3794
+ sig do
3795
+ override.returns(
3796
+ {
3797
+ allowed_days:
3798
+ T::Array[
3799
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3800
+ ],
3801
+ call_twice_in_a_row: T::Boolean,
3802
+ calling_windows:
3803
+ T::Array[
3804
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::CallingWindow
3805
+ ],
3806
+ max_retry_attempts: Integer,
3807
+ timezone: T.nilable(String)
3808
+ }
3809
+ )
3810
+ end
3811
+ def to_hash
3812
+ end
3813
+
3814
+ module AllowedDay
3815
+ extend Revox::Internal::Type::Enum
3816
+
3817
+ TaggedSymbol =
3818
+ T.type_alias do
3819
+ T.all(
3820
+ Symbol,
3821
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay
3822
+ )
3823
+ end
3824
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3825
+
3826
+ MONDAY =
3827
+ T.let(
3828
+ :monday,
3829
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3830
+ )
3831
+ TUESDAY =
3832
+ T.let(
3833
+ :tuesday,
3834
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3835
+ )
3836
+ WEDNESDAY =
3837
+ T.let(
3838
+ :wednesday,
3839
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3840
+ )
3841
+ THURSDAY =
3842
+ T.let(
3843
+ :thursday,
3844
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3845
+ )
3846
+ FRIDAY =
3847
+ T.let(
3848
+ :friday,
3849
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3850
+ )
3851
+ SATURDAY =
3852
+ T.let(
3853
+ :saturday,
3854
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3855
+ )
3856
+ SUNDAY =
3857
+ T.let(
3858
+ :sunday,
3859
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3860
+ )
3861
+
3862
+ sig do
3863
+ override.returns(
3864
+ T::Array[
3865
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3866
+ ]
3867
+ )
3868
+ end
3869
+ def self.values
3870
+ end
3871
+ end
3872
+
3873
+ class CallingWindow < Revox::Internal::Type::BaseModel
3874
+ OrHash =
3875
+ T.type_alias do
3876
+ T.any(
3877
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::CallingWindow,
3878
+ Revox::Internal::AnyHash
3879
+ )
3880
+ end
3881
+
3882
+ # End time for the calling window in the recipient's timezone (or
3883
+ # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
3884
+ # Examples: '17:00', '6pm'. Default: '18:00'.
3885
+ sig { returns(String) }
3886
+ attr_accessor :calling_window_end_time
3887
+
3888
+ # Start time for the calling window in the recipient's timezone (or
3889
+ # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
3890
+ # Examples: '09:00', '10am'. Default: '10:00'.
3891
+ sig { returns(String) }
3892
+ attr_accessor :calling_window_start_time
3893
+
3894
+ # Delay between retry attempts in seconds. Default: 7200 (2 hours).
3895
+ sig { returns(Integer) }
3896
+ attr_accessor :retry_delay_seconds
3897
+
3898
+ sig do
3899
+ params(
3900
+ calling_window_end_time: String,
3901
+ calling_window_start_time: String,
3902
+ retry_delay_seconds: Integer
3903
+ ).returns(T.attached_class)
3904
+ end
3905
+ def self.new(
3906
+ # End time for the calling window in the recipient's timezone (or
3907
+ # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
3908
+ # Examples: '17:00', '6pm'. Default: '18:00'.
3909
+ calling_window_end_time:,
3910
+ # Start time for the calling window in the recipient's timezone (or
3911
+ # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
3912
+ # Examples: '09:00', '10am'. Default: '10:00'.
3913
+ calling_window_start_time:,
3914
+ # Delay between retry attempts in seconds. Default: 7200 (2 hours).
3915
+ retry_delay_seconds:
3916
+ )
3917
+ end
3918
+
3919
+ sig do
3920
+ override.returns(
3921
+ {
3922
+ calling_window_end_time: String,
3923
+ calling_window_start_time: String,
3924
+ retry_delay_seconds: Integer
3925
+ }
3926
+ )
3927
+ end
3928
+ def to_hash
3929
+ end
3930
+ end
3931
+ end
3932
+
3933
+ class CreatedBy < Revox::Internal::Type::BaseModel
3934
+ OrHash =
3935
+ T.type_alias do
3936
+ T.any(
3937
+ Revox::Models::CampaignListResponse::Campaign::CreatedBy,
3938
+ Revox::Internal::AnyHash
3939
+ )
3940
+ end
3941
+
3942
+ # The database user id (foreign key target on calls.assignee_id).
3943
+ sig { returns(String) }
3944
+ attr_accessor :id
3945
+
3946
+ sig { returns(String) }
3947
+ attr_accessor :email
3948
+
3949
+ sig { returns(T.nilable(String)) }
3950
+ attr_accessor :first_name
3951
+
3952
+ sig { returns(T.nilable(String)) }
3953
+ attr_accessor :last_name
3954
+
3955
+ # A member of the current organization.
3956
+ sig do
3957
+ params(
3958
+ id: String,
3959
+ email: String,
3960
+ first_name: T.nilable(String),
3961
+ last_name: T.nilable(String)
3962
+ ).returns(T.attached_class)
3963
+ end
3964
+ def self.new(
3965
+ # The database user id (foreign key target on calls.assignee_id).
3966
+ id:,
3967
+ email:,
3968
+ first_name:,
3969
+ last_name:
3970
+ )
3971
+ end
3972
+
3973
+ sig do
3974
+ override.returns(
3975
+ {
3976
+ id: String,
3977
+ email: String,
3978
+ first_name: T.nilable(String),
3979
+ last_name: T.nilable(String)
3980
+ }
3981
+ )
3982
+ end
3983
+ def to_hash
3984
+ end
3985
+ end
3986
+
3987
+ class FunnelStats < Revox::Internal::Type::BaseModel
3988
+ OrHash =
3989
+ T.type_alias do
3990
+ T.any(
3991
+ Revox::Models::CampaignListResponse::Campaign::FunnelStats,
3992
+ Revox::Internal::AnyHash
3993
+ )
3994
+ end
3995
+
3996
+ sig { returns(Float) }
3997
+ attr_accessor :hot
3998
+
3999
+ sig { returns(Float) }
4000
+ attr_accessor :talked_to_human
4001
+
4002
+ sig { returns(Float) }
4003
+ attr_accessor :total_leads
4004
+
4005
+ sig do
4006
+ params(
4007
+ hot: Float,
4008
+ talked_to_human: Float,
4009
+ total_leads: Float
4010
+ ).returns(T.attached_class)
4011
+ end
4012
+ def self.new(hot:, talked_to_human:, total_leads:)
4013
+ end
4014
+
4015
+ sig do
4016
+ override.returns(
4017
+ { hot: Float, talked_to_human: Float, total_leads: Float }
4018
+ )
4019
+ end
4020
+ def to_hash
4021
+ end
4022
+ end
4023
+
4024
+ module PausedReason
4025
+ extend Revox::Internal::Type::Enum
4026
+
4027
+ TaggedSymbol =
4028
+ T.type_alias do
4029
+ T.all(
4030
+ Symbol,
4031
+ Revox::Models::CampaignListResponse::Campaign::PausedReason
4032
+ )
4033
+ end
4034
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
4035
+
4036
+ MANUAL =
4037
+ T.let(
4038
+ :manual,
4039
+ Revox::Models::CampaignListResponse::Campaign::PausedReason::TaggedSymbol
4040
+ )
4041
+ NO_PRESENCE =
4042
+ T.let(
4043
+ :no_presence,
4044
+ Revox::Models::CampaignListResponse::Campaign::PausedReason::TaggedSymbol
4045
+ )
4046
+
4047
+ sig do
4048
+ override.returns(
4049
+ T::Array[
4050
+ Revox::Models::CampaignListResponse::Campaign::PausedReason::TaggedSymbol
4051
+ ]
4052
+ )
4053
+ end
4054
+ def self.values
4055
+ end
4056
+ end
4057
+
4058
+ class RowStats < Revox::Internal::Type::BaseModel
4059
+ OrHash =
4060
+ T.type_alias do
4061
+ T.any(
4062
+ Revox::Models::CampaignListResponse::Campaign::RowStats,
4063
+ Revox::Internal::AnyHash
4064
+ )
4065
+ end
4066
+
4067
+ sig { returns(Float) }
4068
+ attr_accessor :calling
4069
+
4070
+ sig { returns(Float) }
4071
+ attr_accessor :completed
4072
+
4073
+ sig { returns(Float) }
4074
+ attr_accessor :failed
4075
+
4076
+ sig { returns(Float) }
4077
+ attr_accessor :pending
4078
+
4079
+ sig { returns(Float) }
4080
+ attr_accessor :retry_
4081
+
4082
+ sig { returns(Float) }
4083
+ attr_accessor :total
4084
+
4085
+ sig do
4086
+ params(
4087
+ calling: Float,
4088
+ completed: Float,
4089
+ failed: Float,
4090
+ pending: Float,
4091
+ retry_: Float,
4092
+ total: Float
4093
+ ).returns(T.attached_class)
4094
+ end
4095
+ def self.new(calling:, completed:, failed:, pending:, retry_:, total:)
4096
+ end
4097
+
4098
+ sig do
4099
+ override.returns(
4100
+ {
4101
+ calling: Float,
4102
+ completed: Float,
4103
+ failed: Float,
4104
+ pending: Float,
4105
+ retry_: Float,
4106
+ total: Float
4107
+ }
4108
+ )
4109
+ end
4110
+ def to_hash
4111
+ end
4112
+ end
4113
+
4114
+ # The status of the structured output extraction.
4115
+ module StructuredOutputExtraction
4116
+ extend Revox::Internal::Type::Enum
4117
+
4118
+ TaggedSymbol =
4119
+ T.type_alias do
4120
+ T.all(
4121
+ Symbol,
4122
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction
4123
+ )
4124
+ end
4125
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
4126
+
4127
+ NONE =
4128
+ T.let(
4129
+ :none,
4130
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
4131
+ )
4132
+ RUNNING =
4133
+ T.let(
4134
+ :running,
4135
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
4136
+ )
4137
+ COMPLETED =
4138
+ T.let(
4139
+ :completed,
4140
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
4141
+ )
4142
+
4143
+ sig do
4144
+ override.returns(
4145
+ T::Array[
4146
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
4147
+ ]
4148
+ )
4149
+ end
4150
+ def self.values
4151
+ end
4152
+ end
4153
+ end
4154
+ end
4155
+ end
4156
+ end