revox 0.1.0 → 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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +71 -0
  3. data/README.md +39 -14
  4. data/lib/revox/client.rb +15 -1
  5. data/lib/revox/internal/transport/base_client.rb +5 -0
  6. data/lib/revox/internal/util.rb +22 -7
  7. data/lib/revox/models/assistant_create_params.rb +1038 -13
  8. data/lib/revox/models/assistant_create_response.rb +1071 -11
  9. data/lib/revox/models/assistant_list_response.rb +1070 -11
  10. data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
  11. data/lib/revox/models/assistant_update_params.rb +1038 -13
  12. data/lib/revox/models/assistant_update_response.rb +1097 -12
  13. data/lib/revox/models/call_create_params.rb +1065 -13
  14. data/lib/revox/models/call_create_response.rb +1813 -101
  15. data/lib/revox/models/call_retrieve_response.rb +1815 -101
  16. data/lib/revox/models/campaign_create_params.rb +67 -2
  17. data/lib/revox/models/campaign_create_response.rb +1314 -59
  18. data/lib/revox/models/campaign_get_rows_params.rb +1 -46
  19. data/lib/revox/models/campaign_get_rows_response.rb +1837 -129
  20. data/lib/revox/models/campaign_list_response.rb +1312 -59
  21. data/lib/revox/models/campaign_retrieve_response.rb +1312 -56
  22. data/lib/revox/models/users/me_retrieve_response.rb +13 -1
  23. data/lib/revox/models/users/me_update_response.rb +13 -1
  24. data/lib/revox/models/voice_list_response.rb +55 -1
  25. data/lib/revox/models/voice_preview_params.rb +49 -1
  26. data/lib/revox/models.rb +0 -2
  27. data/lib/revox/resources/assistants.rb +116 -8
  28. data/lib/revox/resources/call.rb +0 -29
  29. data/lib/revox/resources/campaigns.rb +12 -17
  30. data/lib/revox/resources/voices.rb +16 -10
  31. data/lib/revox/version.rb +1 -1
  32. data/lib/revox.rb +0 -2
  33. data/rbi/revox/internal/util.rbi +8 -0
  34. data/rbi/revox/models/assistant_create_params.rbi +2138 -103
  35. data/rbi/revox/models/assistant_create_response.rbi +2454 -199
  36. data/rbi/revox/models/assistant_list_response.rbi +2448 -195
  37. data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
  38. data/rbi/revox/models/assistant_update_params.rbi +2138 -103
  39. data/rbi/revox/models/assistant_update_response.rbi +2504 -198
  40. data/rbi/revox/models/call_create_params.rbi +2382 -225
  41. data/rbi/revox/models/call_create_response.rbi +4104 -384
  42. data/rbi/revox/models/call_retrieve_response.rbi +4104 -382
  43. data/rbi/revox/models/campaign_create_params.rbi +136 -0
  44. data/rbi/revox/models/campaign_create_response.rbi +2911 -231
  45. data/rbi/revox/models/campaign_get_rows_params.rbi +2 -82
  46. data/rbi/revox/models/campaign_get_rows_response.rbi +4135 -410
  47. data/rbi/revox/models/campaign_list_response.rbi +2904 -230
  48. data/rbi/revox/models/campaign_retrieve_response.rbi +2911 -231
  49. data/rbi/revox/models/users/me_retrieve_response.rbi +13 -3
  50. data/rbi/revox/models/users/me_update_response.rbi +13 -3
  51. data/rbi/revox/models/voice_list_response.rbi +105 -3
  52. data/rbi/revox/models/voice_preview_params.rbi +69 -0
  53. data/rbi/revox/models.rbi +0 -2
  54. data/rbi/revox/resources/assistants.rbi +284 -8
  55. data/rbi/revox/resources/call.rbi +0 -21
  56. data/rbi/revox/resources/campaigns.rbi +12 -19
  57. data/rbi/revox/resources/voices.rbi +17 -9
  58. data/sig/revox/internal/util.rbs +4 -0
  59. data/sig/revox/models/assistant_create_params.rbs +844 -11
  60. data/sig/revox/models/assistant_create_response.rbs +860 -3
  61. data/sig/revox/models/assistant_list_response.rbs +860 -3
  62. data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
  63. data/sig/revox/models/assistant_update_params.rbs +844 -11
  64. data/sig/revox/models/assistant_update_response.rbs +886 -6
  65. data/sig/revox/models/call_create_params.rbs +847 -13
  66. data/sig/revox/models/call_create_response.rbs +1514 -34
  67. data/sig/revox/models/call_retrieve_response.rbs +1514 -34
  68. data/sig/revox/models/campaign_create_params.rbs +54 -0
  69. data/sig/revox/models/campaign_create_response.rbs +1034 -6
  70. data/sig/revox/models/campaign_get_rows_params.rbs +2 -64
  71. data/sig/revox/models/campaign_get_rows_response.rbs +1522 -54
  72. data/sig/revox/models/campaign_list_response.rbs +1034 -6
  73. data/sig/revox/models/campaign_retrieve_response.rbs +1034 -6
  74. data/sig/revox/models/users/me_retrieve_response.rbs +8 -3
  75. data/sig/revox/models/users/me_update_response.rbs +8 -3
  76. data/sig/revox/models/voice_list_response.rbs +45 -3
  77. data/sig/revox/models/voice_preview_params.rbs +42 -1
  78. data/sig/revox/models.rbs +0 -2
  79. data/sig/revox/resources/assistants.rbs +56 -2
  80. data/sig/revox/resources/call.rbs +0 -7
  81. data/sig/revox/resources/campaigns.rbs +2 -5
  82. data/sig/revox/resources/voices.rbs +4 -0
  83. metadata +2 -8
  84. data/lib/revox/models/call_list_params.rb +0 -52
  85. data/lib/revox/models/call_list_response.rb +0 -259
  86. data/rbi/revox/models/call_list_params.rbi +0 -94
  87. data/rbi/revox/models/call_list_response.rbi +0 -563
  88. data/sig/revox/models/call_list_params.rbs +0 -63
  89. data/sig/revox/models/call_list_response.rbs +0 -226
@@ -62,9 +62,19 @@ module Revox
62
62
  end
63
63
  attr_accessor :status
64
64
 
65
+ sig do
66
+ returns(
67
+ Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol
68
+ )
69
+ end
70
+ attr_accessor :type
71
+
65
72
  sig { returns(T.anything) }
66
73
  attr_accessor :updated_at
67
74
 
75
+ sig { returns(T.nilable(String)) }
76
+ attr_accessor :active_takeover_call_id
77
+
68
78
  sig do
69
79
  returns(
70
80
  T.nilable(Revox::Models::CampaignListResponse::Campaign::Assistant)
@@ -101,12 +111,62 @@ module Revox
101
111
  end
102
112
  attr_writer :call_retry_config
103
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
+
104
132
  sig { returns(T.nilable(String)) }
105
133
  attr_accessor :from_phone_number
106
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
+
107
152
  sig { returns(T.nilable(Float)) }
108
153
  attr_accessor :max_concurrent_calls
109
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
+
110
170
  sig do
111
171
  returns(
112
172
  T.nilable(Revox::Models::CampaignListResponse::Campaign::RowStats)
@@ -128,6 +188,24 @@ module Revox
128
188
  sig { params(scheduled_at: T.anything).void }
129
189
  attr_writer :scheduled_at
130
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
+
131
209
  sig do
132
210
  params(
133
211
  id: String,
@@ -138,18 +216,33 @@ module Revox
138
216
  organization_id: String,
139
217
  status:
140
218
  Revox::Models::CampaignListResponse::Campaign::Status::OrSymbol,
219
+ type: Revox::Models::CampaignListResponse::Campaign::Type::OrSymbol,
141
220
  updated_at: T.anything,
221
+ active_takeover_call_id: T.nilable(String),
142
222
  assistant:
143
223
  Revox::Models::CampaignListResponse::Campaign::Assistant::OrHash,
144
224
  call_retry_config:
145
225
  T.nilable(
146
226
  Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::OrHash
147
227
  ),
228
+ created_by:
229
+ T.nilable(
230
+ Revox::Models::CampaignListResponse::Campaign::CreatedBy::OrHash
231
+ ),
148
232
  from_phone_number: T.nilable(String),
233
+ funnel_stats:
234
+ Revox::Models::CampaignListResponse::Campaign::FunnelStats::OrHash,
149
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,
150
241
  row_stats:
151
242
  Revox::Models::CampaignListResponse::Campaign::RowStats::OrHash,
152
- scheduled_at: T.anything
243
+ scheduled_at: T.anything,
244
+ structured_output_extraction:
245
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::OrSymbol
153
246
  ).returns(T.attached_class)
154
247
  end
155
248
  def self.new(
@@ -160,15 +253,24 @@ module Revox
160
253
  name:,
161
254
  organization_id:,
162
255
  status:,
256
+ type:,
163
257
  updated_at:,
258
+ active_takeover_call_id: nil,
164
259
  assistant: nil,
165
260
  # Configuration for call retry behavior including time windows, delays, and max
166
261
  # iterations. If not provided, defaults will be used.
167
262
  call_retry_config: nil,
263
+ # A member of the current organization.
264
+ created_by: nil,
168
265
  from_phone_number: nil,
266
+ funnel_stats: nil,
169
267
  max_concurrent_calls: nil,
268
+ paused_reason: nil,
269
+ present_count: nil,
170
270
  row_stats: nil,
171
- scheduled_at: nil
271
+ scheduled_at: nil,
272
+ # The status of the structured output extraction.
273
+ structured_output_extraction: nil
172
274
  )
173
275
  end
174
276
 
@@ -183,18 +285,34 @@ module Revox
183
285
  organization_id: String,
184
286
  status:
185
287
  Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol,
288
+ type:
289
+ Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol,
186
290
  updated_at: T.anything,
291
+ active_takeover_call_id: T.nilable(String),
187
292
  assistant:
188
293
  Revox::Models::CampaignListResponse::Campaign::Assistant,
189
294
  call_retry_config:
190
295
  T.nilable(
191
296
  Revox::Models::CampaignListResponse::Campaign::CallRetryConfig
192
297
  ),
298
+ created_by:
299
+ T.nilable(
300
+ Revox::Models::CampaignListResponse::Campaign::CreatedBy
301
+ ),
193
302
  from_phone_number: T.nilable(String),
303
+ funnel_stats:
304
+ Revox::Models::CampaignListResponse::Campaign::FunnelStats,
194
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,
195
311
  row_stats:
196
312
  Revox::Models::CampaignListResponse::Campaign::RowStats,
197
- scheduled_at: T.anything
313
+ scheduled_at: T.anything,
314
+ structured_output_extraction:
315
+ Revox::Models::CampaignListResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
198
316
  }
199
317
  )
200
318
  end
@@ -245,6 +363,37 @@ module Revox
245
363
  end
246
364
  end
247
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
+
248
397
  class Assistant < Revox::Internal::Type::BaseModel
249
398
  OrHash =
250
399
  T.type_alias do
@@ -257,8 +406,25 @@ module Revox
257
406
  sig { returns(String) }
258
407
  attr_accessor :id
259
408
 
260
- # The background sound to play during the call. Useful to give the impression that
261
- # your AI agent is in an office.
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.
262
428
  sig do
263
429
  returns(
264
430
  T.nilable(
@@ -268,6 +434,10 @@ module Revox
268
434
  end
269
435
  attr_accessor :background_sound
270
436
 
437
+ # Volume of the ambient background sound (0 = silent, 1 = max).
438
+ sig { returns(Float) }
439
+ attr_accessor :background_sound_volume
440
+
271
441
  sig do
272
442
  returns(
273
443
  T.nilable(
@@ -308,9 +478,51 @@ module Revox
308
478
  end
309
479
  attr_writer :call_retry_config
310
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
+
311
485
  sig { returns(T.anything) }
312
486
  attr_accessor :created_at
313
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
+
314
526
  sig { returns(T.nilable(String)) }
315
527
  attr_accessor :end_of_call_sentence
316
528
 
@@ -328,6 +540,22 @@ module Revox
328
540
  end
329
541
  attr_accessor :first_sentence_mode
330
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
+
331
559
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
332
560
  # skip turns to navigate phone menus.
333
561
  sig { returns(T::Boolean) }
@@ -340,20 +568,99 @@ module Revox
340
568
  end
341
569
  attr_accessor :llm_model
342
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
+
343
576
  # The maximum duration of the call in seconds. This is the maximum time the call
344
577
  # will be allowed to run.
345
578
  sig { returns(Float) }
346
579
  attr_accessor :max_call_duration_secs
347
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
+
348
587
  sig { returns(String) }
349
588
  attr_accessor :name
350
589
 
351
590
  sig { returns(String) }
352
591
  attr_accessor :organization_id
353
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
+
354
612
  sig { returns(String) }
355
613
  attr_accessor :prompt
356
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
+
357
664
  # The structured output config to use for the call. This is used to extract the
358
665
  # data from the call (like email, name, company name, etc.).
359
666
  sig do
@@ -367,10 +674,73 @@ module Revox
367
674
  end
368
675
  attr_accessor :structured_output_config
369
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
+
370
733
  # Phone number to transfer calls to when users request to speak to a human agent.
371
734
  sig { returns(T.nilable(String)) }
372
735
  attr_accessor :transfer_phone_number
373
736
 
737
+ sig do
738
+ returns(
739
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::TaggedSymbol
740
+ )
741
+ end
742
+ attr_accessor :type
743
+
374
744
  sig { returns(T.anything) }
375
745
  attr_accessor :updated_at
376
746
 
@@ -398,10 +768,59 @@ module Revox
398
768
  sig { returns(T.nilable(String)) }
399
769
  attr_accessor :voicemail_message
400
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
+
401
781
  # The webhook URL to call when the call is completed.
402
782
  sig { returns(T.nilable(String)) }
403
783
  attr_accessor :webhook_url
404
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
+
405
824
  sig do
406
825
  returns(
407
826
  T.nilable(
@@ -423,6 +842,12 @@ module Revox
423
842
  end
424
843
  attr_writer :faq_items
425
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
+
426
851
  sig { returns(T.nilable(Float)) }
427
852
  attr_reader :pending_faq_count
428
853
 
@@ -432,10 +857,18 @@ module Revox
432
857
  sig do
433
858
  params(
434
859
  id: String,
435
- background_sound:
860
+ after_call_sms_outcomes:
436
861
  T.nilable(
437
- Revox::Models::CampaignListResponse::Campaign::Assistant::BackgroundSound::OrSymbol
438
- ),
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,
439
872
  calendly:
440
873
  T.nilable(
441
874
  Revox::Models::CampaignListResponse::Campaign::Assistant::Calendly::OrHash
@@ -444,81 +877,217 @@ module Revox
444
877
  T.nilable(
445
878
  Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::OrHash
446
879
  ),
880
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
447
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
+ ),
448
897
  end_of_call_sentence: T.nilable(String),
449
898
  first_sentence: T.nilable(String),
450
899
  first_sentence_delay_ms: Integer,
451
900
  first_sentence_mode:
452
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
+ ),
453
907
  ivr_navigation_enabled: T::Boolean,
454
908
  llm_model:
455
909
  T.any(
456
910
  Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::OrHash,
457
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember1::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
458
914
  ),
915
+ logo_url: T.nilable(String),
459
916
  max_call_duration_secs: Float,
917
+ max_duration_end_message: T.nilable(String),
460
918
  name: String,
461
919
  organization_id: String,
920
+ position:
921
+ T.nilable(
922
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Position::OrHash
923
+ ),
462
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),
463
935
  structured_output_config:
464
936
  T.nilable(
465
937
  T::Array[
466
938
  Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::OrHash
467
939
  ]
468
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,
469
954
  transfer_phone_number: T.nilable(String),
955
+ type:
956
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::OrSymbol,
470
957
  updated_at: T.anything,
471
958
  voice:
472
959
  T.nilable(
473
960
  Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::OrHash
474
961
  ),
475
962
  voicemail_message: T.nilable(String),
963
+ voicemail_sms_prompt: T.nilable(String),
964
+ warm_transfer_summary_instructions: T.nilable(String),
476
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
+ ),
477
974
  faq_items:
478
975
  T::Array[
479
976
  Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::OrHash
480
977
  ],
978
+ is_realestate_assistant: T::Boolean,
481
979
  pending_faq_count: Float
482
980
  ).returns(T.attached_class)
483
981
  end
484
982
  def self.new(
485
983
  id:,
486
- # The background sound to play during the call. Useful to give the impression that
487
- # your AI agent is in an office.
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.
488
991
  background_sound:,
992
+ # Volume of the ambient background sound (0 = silent, 1 = max).
993
+ background_sound_volume:,
489
994
  calendly:,
490
995
  # Configuration for call retry behavior including time windows, delays, and max
491
996
  # iterations. If not provided, defaults will be used.
492
997
  call_retry_config:,
998
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
999
+ cartesia_dictionary_pronunciation_id:,
493
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:,
494
1011
  end_of_call_sentence:,
495
1012
  first_sentence:,
496
1013
  # Delay in milliseconds before speaking the first sentence. Default: 400.
497
1014
  first_sentence_delay_ms:,
498
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:,
499
1022
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
500
1023
  # skip turns to navigate phone menus.
501
1024
  ivr_navigation_enabled:,
502
1025
  llm_model:,
1026
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
1027
+ # unset.
1028
+ logo_url:,
503
1029
  # The maximum duration of the call in seconds. This is the maximum time the call
504
1030
  # will be allowed to run.
505
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:,
506
1036
  name:,
507
1037
  organization_id:,
1038
+ position:,
508
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:,
509
1049
  # The structured output config to use for the call. This is used to extract the
510
1050
  # data from the call (like email, name, company name, etc.).
511
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:,
512
1070
  # Phone number to transfer calls to when users request to speak to a human agent.
513
1071
  transfer_phone_number:,
1072
+ type:,
514
1073
  updated_at:,
515
1074
  voice:,
516
1075
  # If set, when voicemail is detected the agent will speak this message then hang
517
1076
  # up; if null, hang up immediately.
518
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:,
519
1084
  # The webhook URL to call when the call is completed.
520
1085
  webhook_url:,
1086
+ zoho:,
1087
+ # The user who created the assistant.
1088
+ created_by: nil,
521
1089
  faq_items: nil,
1090
+ is_realestate_assistant: nil,
522
1091
  pending_faq_count: nil
523
1092
  )
524
1093
  end
@@ -527,10 +1096,18 @@ module Revox
527
1096
  override.returns(
528
1097
  {
529
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),
530
1106
  background_sound:
531
1107
  T.nilable(
532
1108
  Revox::Models::CampaignListResponse::Campaign::Assistant::BackgroundSound::TaggedSymbol
533
1109
  ),
1110
+ background_sound_volume: Float,
534
1111
  calendly:
535
1112
  T.nilable(
536
1113
  Revox::Models::CampaignListResponse::Campaign::Assistant::Calendly
@@ -539,37 +1116,100 @@ module Revox
539
1116
  T.nilable(
540
1117
  Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig
541
1118
  ),
1119
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
542
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
+ ),
543
1136
  end_of_call_sentence: T.nilable(String),
544
1137
  first_sentence: T.nilable(String),
545
1138
  first_sentence_delay_ms: Integer,
546
1139
  first_sentence_mode:
547
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
+ ),
548
1146
  ivr_navigation_enabled: T::Boolean,
549
1147
  llm_model:
550
1148
  Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::Variants,
1149
+ logo_url: T.nilable(String),
551
1150
  max_call_duration_secs: Float,
1151
+ max_duration_end_message: T.nilable(String),
552
1152
  name: String,
553
1153
  organization_id: String,
1154
+ position:
1155
+ T.nilable(
1156
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Position
1157
+ ),
554
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),
555
1169
  structured_output_config:
556
1170
  T.nilable(
557
1171
  T::Array[
558
1172
  Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig
559
1173
  ]
560
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,
561
1188
  transfer_phone_number: T.nilable(String),
1189
+ type:
1190
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Type::TaggedSymbol,
562
1191
  updated_at: T.anything,
563
1192
  voice:
564
1193
  T.nilable(
565
1194
  Revox::Models::CampaignListResponse::Campaign::Assistant::Voice
566
1195
  ),
567
1196
  voicemail_message: T.nilable(String),
1197
+ voicemail_sms_prompt: T.nilable(String),
1198
+ warm_transfer_summary_instructions: T.nilable(String),
568
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
+ ),
569
1208
  faq_items:
570
1209
  T::Array[
571
1210
  Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem
572
1211
  ],
1212
+ is_realestate_assistant: T::Boolean,
573
1213
  pending_faq_count: Float
574
1214
  }
575
1215
  )
@@ -577,8 +1217,71 @@ module Revox
577
1217
  def to_hash
578
1218
  end
579
1219
 
580
- # The background sound to play during the call. Useful to give the impression that
581
- # your AI agent is in an office.
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.
582
1285
  module BackgroundSound
583
1286
  extend Revox::Internal::Type::Enum
584
1287
 
@@ -656,6 +1359,24 @@ module Revox
656
1359
  )
657
1360
  end
658
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
+
659
1380
  sig do
660
1381
  returns(
661
1382
  T::Array[
@@ -679,6 +1400,11 @@ module Revox
679
1400
  # iterations. If not provided, defaults will be used.
680
1401
  sig do
681
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,
682
1408
  calling_windows:
683
1409
  T::Array[
684
1410
  Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::CallingWindow::OrHash
@@ -688,6 +1414,14 @@ module Revox
688
1414
  ).returns(T.attached_class)
689
1415
  end
690
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:,
691
1425
  calling_windows:,
692
1426
  # Maximum number of call retry attempts. Default: 3.
693
1427
  max_retry_attempts:,
@@ -701,6 +1435,11 @@ module Revox
701
1435
  sig do
702
1436
  override.returns(
703
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,
704
1443
  calling_windows:
705
1444
  T::Array[
706
1445
  Revox::Models::CampaignListResponse::Campaign::Assistant::CallRetryConfig::CallingWindow
@@ -713,6 +1452,65 @@ module Revox
713
1452
  def to_hash
714
1453
  end
715
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
+
716
1514
  class CallingWindow < Revox::Internal::Type::BaseModel
717
1515
  OrHash =
718
1516
  T.type_alias do
@@ -773,124 +1571,289 @@ module Revox
773
1571
  end
774
1572
  end
775
1573
 
776
- module FirstSentenceMode
777
- extend Revox::Internal::Type::Enum
778
-
779
- TaggedSymbol =
1574
+ class CustomTool < Revox::Internal::Type::BaseModel
1575
+ OrHash =
780
1576
  T.type_alias do
781
- T.all(
782
- Symbol,
783
- Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode
1577
+ T.any(
1578
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool,
1579
+ Revox::Internal::AnyHash
784
1580
  )
785
1581
  end
786
- OrSymbol = T.type_alias { T.any(Symbol, String) }
787
1582
 
788
- GENERATED =
789
- T.let(
790
- :generated,
791
- Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
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
+ ]
792
1599
  )
793
- STATIC =
794
- T.let(
795
- :static,
796
- Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
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
+ ]
797
1610
  )
798
- NONE =
799
- T.let(
800
- :none,
801
- Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
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
802
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
803
1625
 
1626
+ # Query string parameters appended to the URL. Values support {{variable}}
1627
+ # placeholders
804
1628
  sig do
805
- override.returns(
1629
+ returns(
806
1630
  T::Array[
807
- Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
1631
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::QueryParam
808
1632
  ]
809
1633
  )
810
1634
  end
811
- def self.values
812
- end
813
- end
1635
+ attr_accessor :query_params
814
1636
 
815
- module LlmModel
816
- extend Revox::Internal::Type::Union
1637
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
1638
+ # values
1639
+ sig { returns(String) }
1640
+ attr_accessor :url
817
1641
 
818
- Variants =
819
- T.type_alias do
820
- T.any(
821
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0,
822
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember1
823
- )
824
- end
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
825
1688
 
826
- class UnionMember0 < Revox::Internal::Type::BaseModel
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
827
1717
  OrHash =
828
1718
  T.type_alias do
829
1719
  T.any(
830
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0,
1720
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::Header,
831
1721
  Revox::Internal::AnyHash
832
1722
  )
833
1723
  end
834
1724
 
835
- sig do
836
- returns(
837
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
838
- )
839
- end
840
- attr_accessor :name
1725
+ sig { returns(String) }
1726
+ attr_accessor :key
841
1727
 
842
- sig { returns(Symbol) }
843
- attr_accessor :type
1728
+ sig { returns(String) }
1729
+ attr_accessor :value
844
1730
 
845
1731
  sig do
846
- params(
847
- name:
848
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::OrSymbol,
849
- type: Symbol
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]
850
1784
  ).returns(T.attached_class)
851
1785
  end
852
- def self.new(name:, type: :"dedicated-instance")
1786
+ def self.new(
1787
+ name:,
1788
+ required:,
1789
+ type:,
1790
+ description: nil,
1791
+ enum_options: nil
1792
+ )
853
1793
  end
854
1794
 
855
1795
  sig do
856
1796
  override.returns(
857
1797
  {
858
- name:
859
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol,
860
- type: Symbol
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]
861
1804
  }
862
1805
  )
863
1806
  end
864
1807
  def to_hash
865
1808
  end
866
1809
 
867
- module Name
1810
+ module Type
868
1811
  extend Revox::Internal::Type::Enum
869
1812
 
870
1813
  TaggedSymbol =
871
1814
  T.type_alias do
872
1815
  T.all(
873
1816
  Symbol,
874
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name
1817
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type
875
1818
  )
876
1819
  end
877
1820
  OrSymbol = T.type_alias { T.any(Symbol, String) }
878
1821
 
879
- GPT_4_1 =
1822
+ STRING =
880
1823
  T.let(
881
- :"gpt-4.1",
882
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1824
+ :string,
1825
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
883
1826
  )
884
- MINISTRAL_3_8B_INSTRUCT =
1827
+ NUMBER =
885
1828
  T.let(
886
- :"ministral-3-8b-instruct",
887
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
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
888
1851
  )
889
1852
 
890
1853
  sig do
891
1854
  override.returns(
892
1855
  T::Array[
893
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1856
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
894
1857
  ]
895
1858
  )
896
1859
  end
@@ -899,124 +1862,1020 @@ module Revox
899
1862
  end
900
1863
  end
901
1864
 
902
- class UnionMember1 < Revox::Internal::Type::BaseModel
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
903
1916
  OrHash =
904
1917
  T.type_alias do
905
1918
  T.any(
906
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::UnionMember1,
1919
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CustomTool::QueryParam,
907
1920
  Revox::Internal::AnyHash
908
1921
  )
909
1922
  end
910
1923
 
911
- # The model ID to use from OpenRouter. eg: openai/gpt-4.1
912
1924
  sig { returns(String) }
913
- attr_accessor :openrouter_model_id
1925
+ attr_accessor :key
914
1926
 
915
- # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
916
1927
  sig { returns(String) }
917
- attr_accessor :openrouter_provider
918
-
919
- # Use a model from OpenRouter.
920
- sig { returns(Symbol) }
921
- attr_accessor :type
1928
+ attr_accessor :value
922
1929
 
923
1930
  sig do
924
- params(
925
- openrouter_model_id: String,
926
- openrouter_provider: String,
927
- type: Symbol
928
- ).returns(T.attached_class)
1931
+ params(key: String, value: String).returns(T.attached_class)
929
1932
  end
930
- def self.new(
931
- # The model ID to use from OpenRouter. eg: openai/gpt-4.1
932
- openrouter_model_id:,
933
- # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
934
- openrouter_provider:,
935
- # Use a model from OpenRouter.
936
- type: :openrouter
937
- )
1933
+ def self.new(key:, value:)
938
1934
  end
939
1935
 
940
- sig do
941
- override.returns(
942
- {
943
- openrouter_model_id: String,
944
- openrouter_provider: String,
945
- type: Symbol
946
- }
947
- )
948
- end
1936
+ sig { override.returns({ key: String, value: String }) }
949
1937
  def to_hash
950
1938
  end
951
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
+ )
952
1965
 
953
1966
  sig do
954
1967
  override.returns(
955
1968
  T::Array[
956
- Revox::Models::CampaignListResponse::Campaign::Assistant::LlmModel::Variants
1969
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
957
1970
  ]
958
1971
  )
959
1972
  end
960
- def self.variants
1973
+ def self.values
961
1974
  end
962
1975
  end
963
1976
 
964
- class StructuredOutputConfig < Revox::Internal::Type::BaseModel
965
- OrHash =
1977
+ module EmailNotificationOutcome
1978
+ extend Revox::Internal::Type::Enum
1979
+
1980
+ TaggedSymbol =
966
1981
  T.type_alias do
967
- T.any(
968
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig,
969
- Revox::Internal::AnyHash
1982
+ T.all(
1983
+ Symbol,
1984
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome
970
1985
  )
971
1986
  end
1987
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
972
1988
 
973
- sig { returns(String) }
974
- attr_accessor :name
975
-
976
- sig { returns(T::Boolean) }
977
- attr_accessor :required
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
+ )
978
2029
 
979
2030
  sig do
980
- returns(
981
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2031
+ override.returns(
2032
+ T::Array[
2033
+ Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2034
+ ]
982
2035
  )
983
2036
  end
984
- attr_accessor :type
985
-
986
- sig { returns(T.nilable(String)) }
987
- attr_reader :description
2037
+ def self.values
2038
+ end
2039
+ end
988
2040
 
989
- sig { params(description: String).void }
990
- attr_writer :description
2041
+ module FirstSentenceMode
2042
+ extend Revox::Internal::Type::Enum
991
2043
 
992
- sig { returns(T.nilable(T::Array[String])) }
993
- attr_reader :enum_options
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) }
994
2052
 
995
- sig { params(enum_options: T::Array[String]).void }
996
- attr_writer :enum_options
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
+ )
997
2068
 
998
2069
  sig do
999
- params(
1000
- name: String,
1001
- required: T::Boolean,
1002
- type:
1003
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::OrSymbol,
1004
- description: String,
1005
- enum_options: T::Array[String]
1006
- ).returns(T.attached_class)
2070
+ override.returns(
2071
+ T::Array[
2072
+ Revox::Models::CampaignListResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
2073
+ ]
2074
+ )
1007
2075
  end
1008
- def self.new(
1009
- name:,
1010
- required:,
1011
- type:,
1012
- description: nil,
1013
- enum_options: nil
1014
- )
2076
+ def self.values
1015
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
+ )
1016
2104
 
1017
2105
  sig do
1018
2106
  override.returns(
1019
- {
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
+ {
1020
2879
  name: String,
1021
2880
  required: T::Boolean,
1022
2881
  type:
@@ -1029,53 +2888,651 @@ module Revox
1029
2888
  def to_hash
1030
2889
  end
1031
2890
 
1032
- module Type
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
1033
3480
  extend Revox::Internal::Type::Enum
1034
3481
 
1035
3482
  TaggedSymbol =
1036
3483
  T.type_alias do
1037
3484
  T.all(
1038
3485
  Symbol,
1039
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type
3486
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome
1040
3487
  )
1041
3488
  end
1042
3489
  OrSymbol = T.type_alias { T.any(Symbol, String) }
1043
3490
 
1044
- STRING =
3491
+ NOT_INTERESTED =
1045
3492
  T.let(
1046
- :string,
1047
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3493
+ :not_interested,
3494
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1048
3495
  )
1049
- NUMBER =
3496
+ INTERESTED =
1050
3497
  T.let(
1051
- :number,
1052
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3498
+ :interested,
3499
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1053
3500
  )
1054
- BOOLEAN =
3501
+ COMPLETED =
1055
3502
  T.let(
1056
- :boolean,
1057
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3503
+ :completed,
3504
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1058
3505
  )
1059
- ENUM =
3506
+ REQUESTED_CALLBACK_LATER =
1060
3507
  T.let(
1061
- :enum,
1062
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3508
+ :requested_callback_later,
3509
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1063
3510
  )
1064
- DATE =
3511
+ REQUESTED_CALLBACK_NEW_NUMBER =
1065
3512
  T.let(
1066
- :date,
1067
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3513
+ :requested_callback_new_number,
3514
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1068
3515
  )
1069
- DATETIME =
3516
+ DO_NOT_CONTACT =
1070
3517
  T.let(
1071
- :datetime,
1072
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
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
1073
3530
  )
1074
3531
 
1075
3532
  sig do
1076
3533
  override.returns(
1077
3534
  T::Array[
1078
- Revox::Models::CampaignListResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3535
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1079
3536
  ]
1080
3537
  )
1081
3538
  end
@@ -1084,51 +3541,43 @@ module Revox
1084
3541
  end
1085
3542
  end
1086
3543
 
1087
- class Voice < Revox::Internal::Type::BaseModel
3544
+ class CreatedBy < Revox::Internal::Type::BaseModel
1088
3545
  OrHash =
1089
3546
  T.type_alias do
1090
3547
  T.any(
1091
- Revox::Models::CampaignListResponse::Campaign::Assistant::Voice,
3548
+ Revox::Models::CampaignListResponse::Campaign::Assistant::CreatedBy,
1092
3549
  Revox::Internal::AnyHash
1093
3550
  )
1094
3551
  end
1095
3552
 
1096
- # The ID of the voice.
3553
+ # The database user id of the creator.
1097
3554
  sig { returns(String) }
1098
3555
  attr_accessor :id
1099
3556
 
1100
- # The provider of the voice.
1101
- sig do
1102
- returns(
1103
- Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
1104
- )
1105
- end
1106
- attr_accessor :provider
3557
+ sig { returns(String) }
3558
+ attr_accessor :email
1107
3559
 
1108
- # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
1109
- # 0.7–1.2. Default is 1.0.
1110
- sig { returns(T.nilable(Float)) }
1111
- attr_reader :speed
3560
+ sig { returns(T.nilable(String)) }
3561
+ attr_accessor :first_name
1112
3562
 
1113
- sig { params(speed: Float).void }
1114
- attr_writer :speed
3563
+ sig { returns(T.nilable(String)) }
3564
+ attr_accessor :last_name
1115
3565
 
3566
+ # The user who created the assistant.
1116
3567
  sig do
1117
3568
  params(
1118
3569
  id: String,
1119
- provider:
1120
- Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::OrSymbol,
1121
- speed: Float
3570
+ email: String,
3571
+ first_name: T.nilable(String),
3572
+ last_name: T.nilable(String)
1122
3573
  ).returns(T.attached_class)
1123
3574
  end
1124
3575
  def self.new(
1125
- # The ID of the voice.
3576
+ # The database user id of the creator.
1126
3577
  id:,
1127
- # The provider of the voice.
1128
- provider:,
1129
- # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
1130
- # 0.7–1.2. Default is 1.0.
1131
- speed: nil
3578
+ email:,
3579
+ first_name:,
3580
+ last_name:
1132
3581
  )
1133
3582
  end
1134
3583
 
@@ -1136,49 +3585,14 @@ module Revox
1136
3585
  override.returns(
1137
3586
  {
1138
3587
  id: String,
1139
- provider:
1140
- Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol,
1141
- speed: Float
3588
+ email: String,
3589
+ first_name: T.nilable(String),
3590
+ last_name: T.nilable(String)
1142
3591
  }
1143
3592
  )
1144
3593
  end
1145
3594
  def to_hash
1146
3595
  end
1147
-
1148
- # The provider of the voice.
1149
- module Provider
1150
- extend Revox::Internal::Type::Enum
1151
-
1152
- TaggedSymbol =
1153
- T.type_alias do
1154
- T.all(
1155
- Symbol,
1156
- Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider
1157
- )
1158
- end
1159
- OrSymbol = T.type_alias { T.any(Symbol, String) }
1160
-
1161
- CARTESIA =
1162
- T.let(
1163
- :cartesia,
1164
- Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
1165
- )
1166
- ELEVENLABS =
1167
- T.let(
1168
- :elevenlabs,
1169
- Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
1170
- )
1171
-
1172
- sig do
1173
- override.returns(
1174
- T::Array[
1175
- Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
1176
- ]
1177
- )
1178
- end
1179
- def self.values
1180
- end
1181
- end
1182
3596
  end
1183
3597
 
1184
3598
  class FaqItem < Revox::Internal::Type::BaseModel
@@ -1304,6 +3718,24 @@ module Revox
1304
3718
  )
1305
3719
  end
1306
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
+
1307
3739
  sig do
1308
3740
  returns(
1309
3741
  T::Array[
@@ -1327,6 +3759,11 @@ module Revox
1327
3759
  # iterations. If not provided, defaults will be used.
1328
3760
  sig do
1329
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,
1330
3767
  calling_windows:
1331
3768
  T::Array[
1332
3769
  Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::CallingWindow::OrHash
@@ -1336,6 +3773,14 @@ module Revox
1336
3773
  ).returns(T.attached_class)
1337
3774
  end
1338
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:,
1339
3784
  calling_windows:,
1340
3785
  # Maximum number of call retry attempts. Default: 3.
1341
3786
  max_retry_attempts:,
@@ -1349,6 +3794,11 @@ module Revox
1349
3794
  sig do
1350
3795
  override.returns(
1351
3796
  {
3797
+ allowed_days:
3798
+ T::Array[
3799
+ Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3800
+ ],
3801
+ call_twice_in_a_row: T::Boolean,
1352
3802
  calling_windows:
1353
3803
  T::Array[
1354
3804
  Revox::Models::CampaignListResponse::Campaign::CallRetryConfig::CallingWindow
@@ -1361,6 +3811,65 @@ module Revox
1361
3811
  def to_hash
1362
3812
  end
1363
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
+
1364
3873
  class CallingWindow < Revox::Internal::Type::BaseModel
1365
3874
  OrHash =
1366
3875
  T.type_alias do
@@ -1421,6 +3930,131 @@ module Revox
1421
3930
  end
1422
3931
  end
1423
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
+
1424
4058
  class RowStats < Revox::Internal::Type::BaseModel
1425
4059
  OrHash =
1426
4060
  T.type_alias do
@@ -1476,6 +4110,46 @@ module Revox
1476
4110
  def to_hash
1477
4111
  end
1478
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
1479
4153
  end
1480
4154
  end
1481
4155
  end