revox 0.3.0 → 0.4.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 (105) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/README.md +38 -38
  4. data/lib/revox/models/assistant_clone_response.rb +87 -65
  5. data/lib/revox/models/assistant_create_params.rb +90 -66
  6. data/lib/revox/models/assistant_create_response.rb +87 -65
  7. data/lib/revox/models/assistant_list_response.rb +87 -65
  8. data/lib/revox/models/assistant_retrieve_response.rb +86 -65
  9. data/lib/revox/models/assistant_update_params.rb +90 -66
  10. data/lib/revox/models/assistant_update_response.rb +87 -65
  11. data/lib/revox/models/call_create_params.rb +117 -90
  12. data/lib/revox/models/call_create_response.rb +670 -90
  13. data/lib/revox/models/call_export_params.rb +1 -3
  14. data/lib/revox/models/call_phone_history_response.rb +0 -3
  15. data/lib/revox/models/call_retrieve_response.rb +671 -90
  16. data/lib/revox/models/call_search_params.rb +1 -3
  17. data/lib/revox/models/call_search_response.rb +670 -90
  18. data/lib/revox/models/campaign_create_params.rb +7 -57
  19. data/lib/revox/models/campaign_create_response.rb +108 -119
  20. data/lib/revox/models/campaign_get_rows_response.rb +672 -90
  21. data/lib/revox/models/campaign_list_response.rb +108 -119
  22. data/lib/revox/models/campaign_retrieve_response.rb +108 -119
  23. data/lib/revox/models/campaign_statistics_response.rb +51 -23
  24. data/lib/revox/models/campaign_update_params.rb +9 -78
  25. data/lib/revox/models/campaign_update_response.rb +108 -119
  26. data/lib/revox/models/phone_number_list_response.rb +87 -65
  27. data/lib/revox/models/phone_number_update_response.rb +87 -65
  28. data/lib/revox/models/voice_list_response.rb +1 -0
  29. data/lib/revox/models/voice_preview_params.rb +1 -0
  30. data/lib/revox/models/voice_retrieve_params.rb +1 -0
  31. data/lib/revox/models.rb +0 -2
  32. data/lib/revox/resources/assistants.rb +10 -10
  33. data/lib/revox/resources/call.rb +4 -4
  34. data/lib/revox/resources/campaigns.rb +13 -45
  35. data/lib/revox/version.rb +1 -1
  36. data/lib/revox.rb +0 -2
  37. data/rbi/revox/models/assistant_clone_response.rbi +157 -147
  38. data/rbi/revox/models/assistant_create_params.rbi +148 -162
  39. data/rbi/revox/models/assistant_create_response.rbi +157 -147
  40. data/rbi/revox/models/assistant_list_response.rbi +157 -147
  41. data/rbi/revox/models/assistant_retrieve_response.rbi +153 -147
  42. data/rbi/revox/models/assistant_update_params.rbi +148 -162
  43. data/rbi/revox/models/assistant_update_response.rbi +157 -147
  44. data/rbi/revox/models/call_create_params.rbi +190 -187
  45. data/rbi/revox/models/call_create_response.rbi +1138 -227
  46. data/rbi/revox/models/call_export_params.rbi +5 -15
  47. data/rbi/revox/models/call_phone_history_response.rbi +0 -15
  48. data/rbi/revox/models/call_retrieve_response.rbi +1138 -227
  49. data/rbi/revox/models/call_search_params.rbi +2 -9
  50. data/rbi/revox/models/call_search_response.rbi +1138 -227
  51. data/rbi/revox/models/campaign_create_params.rbi +9 -87
  52. data/rbi/revox/models/campaign_create_response.rbi +188 -266
  53. data/rbi/revox/models/campaign_get_rows_response.rbi +1138 -225
  54. data/rbi/revox/models/campaign_list_response.rbi +188 -262
  55. data/rbi/revox/models/campaign_retrieve_response.rbi +188 -266
  56. data/rbi/revox/models/campaign_statistics_response.rbi +94 -36
  57. data/rbi/revox/models/campaign_update_params.rbi +10 -128
  58. data/rbi/revox/models/campaign_update_response.rbi +188 -266
  59. data/rbi/revox/models/phone_number_list_response.rbi +157 -147
  60. data/rbi/revox/models/phone_number_update_response.rbi +157 -147
  61. data/rbi/revox/models/voice_list_response.rbi +5 -0
  62. data/rbi/revox/models/voice_preview_params.rbi +2 -0
  63. data/rbi/revox/models/voice_retrieve_params.rbi +2 -0
  64. data/rbi/revox/models.rbi +0 -2
  65. data/rbi/revox/resources/assistants.rbi +40 -22
  66. data/rbi/revox/resources/call.rbi +7 -4
  67. data/rbi/revox/resources/campaigns.rbi +12 -44
  68. data/sig/revox/models/assistant_clone_response.rbs +46 -54
  69. data/sig/revox/models/assistant_create_params.rbs +39 -58
  70. data/sig/revox/models/assistant_create_response.rbs +46 -54
  71. data/sig/revox/models/assistant_list_response.rbs +46 -54
  72. data/sig/revox/models/assistant_retrieve_response.rbs +46 -54
  73. data/sig/revox/models/assistant_update_params.rbs +39 -58
  74. data/sig/revox/models/assistant_update_response.rbs +46 -54
  75. data/sig/revox/models/call_create_params.rbs +50 -71
  76. data/sig/revox/models/call_create_response.rbs +468 -77
  77. data/sig/revox/models/call_export_params.rbs +2 -6
  78. data/sig/revox/models/call_phone_history_response.rbs +1 -10
  79. data/sig/revox/models/call_retrieve_response.rbs +468 -77
  80. data/sig/revox/models/call_search_params.rbs +2 -6
  81. data/sig/revox/models/call_search_response.rbs +468 -77
  82. data/sig/revox/models/campaign_create_params.rbs +5 -50
  83. data/sig/revox/models/campaign_create_response.rbs +62 -98
  84. data/sig/revox/models/campaign_get_rows_response.rbs +467 -73
  85. data/sig/revox/models/campaign_list_response.rbs +62 -98
  86. data/sig/revox/models/campaign_retrieve_response.rbs +62 -98
  87. data/sig/revox/models/campaign_statistics_response.rbs +55 -24
  88. data/sig/revox/models/campaign_update_params.rbs +1 -69
  89. data/sig/revox/models/campaign_update_response.rbs +62 -98
  90. data/sig/revox/models/phone_number_list_response.rbs +46 -54
  91. data/sig/revox/models/phone_number_update_response.rbs +46 -54
  92. data/sig/revox/models/voice_list_response.rbs +2 -1
  93. data/sig/revox/models/voice_preview_params.rbs +2 -1
  94. data/sig/revox/models/voice_retrieve_params.rbs +2 -1
  95. data/sig/revox/models.rbs +0 -2
  96. data/sig/revox/resources/assistants.rbs +4 -4
  97. data/sig/revox/resources/call.rbs +1 -1
  98. data/sig/revox/resources/campaigns.rbs +0 -12
  99. metadata +2 -8
  100. data/lib/revox/models/campaign_launch_params.rb +0 -20
  101. data/lib/revox/models/campaign_launch_response.rb +0 -2030
  102. data/rbi/revox/models/campaign_launch_params.rbi +0 -33
  103. data/rbi/revox/models/campaign_launch_response.rbi +0 -4170
  104. data/sig/revox/models/campaign_launch_params.rbs +0 -20
  105. data/sig/revox/models/campaign_launch_response.rbs +0 -1694
@@ -71,19 +71,9 @@ module Revox
71
71
  end
72
72
  attr_accessor :status
73
73
 
74
- sig do
75
- returns(
76
- Revox::Models::CampaignRetrieveResponse::Campaign::Type::TaggedSymbol
77
- )
78
- end
79
- attr_accessor :type
80
-
81
74
  sig { returns(T.anything) }
82
75
  attr_accessor :updated_at
83
76
 
84
- sig { returns(T.nilable(String)) }
85
- attr_accessor :active_takeover_call_id
86
-
87
77
  sig do
88
78
  returns(
89
79
  T.nilable(
@@ -165,20 +155,11 @@ module Revox
165
155
  sig { returns(T.nilable(Float)) }
166
156
  attr_accessor :max_concurrent_calls
167
157
 
168
- sig do
169
- returns(
170
- T.nilable(
171
- Revox::Models::CampaignRetrieveResponse::Campaign::PausedReason::TaggedSymbol
172
- )
173
- )
174
- end
175
- attr_accessor :paused_reason
176
-
177
- sig { returns(T.nilable(Float)) }
178
- attr_reader :present_count
158
+ sig { returns(T.nilable(T::Array[String])) }
159
+ attr_reader :metadata_keys
179
160
 
180
- sig { params(present_count: Float).void }
181
- attr_writer :present_count
161
+ sig { params(metadata_keys: T::Array[String]).void }
162
+ attr_writer :metadata_keys
182
163
 
183
164
  sig do
184
165
  returns(
@@ -231,10 +212,7 @@ module Revox
231
212
  organization_id: String,
232
213
  status:
233
214
  Revox::Models::CampaignRetrieveResponse::Campaign::Status::OrSymbol,
234
- type:
235
- Revox::Models::CampaignRetrieveResponse::Campaign::Type::OrSymbol,
236
215
  updated_at: T.anything,
237
- active_takeover_call_id: T.nilable(String),
238
216
  assistant:
239
217
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::OrHash,
240
218
  call_retry_config:
@@ -249,11 +227,7 @@ module Revox
249
227
  funnel_stats:
250
228
  Revox::Models::CampaignRetrieveResponse::Campaign::FunnelStats::OrHash,
251
229
  max_concurrent_calls: T.nilable(Float),
252
- paused_reason:
253
- T.nilable(
254
- Revox::Models::CampaignRetrieveResponse::Campaign::PausedReason::OrSymbol
255
- ),
256
- present_count: Float,
230
+ metadata_keys: T::Array[String],
257
231
  row_stats:
258
232
  Revox::Models::CampaignRetrieveResponse::Campaign::RowStats::OrHash,
259
233
  scheduled_at: T.anything,
@@ -269,9 +243,7 @@ module Revox
269
243
  name:,
270
244
  organization_id:,
271
245
  status:,
272
- type:,
273
246
  updated_at:,
274
- active_takeover_call_id: nil,
275
247
  assistant: nil,
276
248
  # Configuration for call retry behavior including time windows, delays, and max
277
249
  # iterations. If not provided, defaults will be used.
@@ -281,8 +253,7 @@ module Revox
281
253
  from_phone_number: nil,
282
254
  funnel_stats: nil,
283
255
  max_concurrent_calls: nil,
284
- paused_reason: nil,
285
- present_count: nil,
256
+ metadata_keys: nil,
286
257
  row_stats: nil,
287
258
  scheduled_at: nil,
288
259
  # The status of the structured output extraction.
@@ -301,10 +272,7 @@ module Revox
301
272
  organization_id: String,
302
273
  status:
303
274
  Revox::Models::CampaignRetrieveResponse::Campaign::Status::TaggedSymbol,
304
- type:
305
- Revox::Models::CampaignRetrieveResponse::Campaign::Type::TaggedSymbol,
306
275
  updated_at: T.anything,
307
- active_takeover_call_id: T.nilable(String),
308
276
  assistant:
309
277
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant,
310
278
  call_retry_config:
@@ -319,11 +287,7 @@ module Revox
319
287
  funnel_stats:
320
288
  Revox::Models::CampaignRetrieveResponse::Campaign::FunnelStats,
321
289
  max_concurrent_calls: T.nilable(Float),
322
- paused_reason:
323
- T.nilable(
324
- Revox::Models::CampaignRetrieveResponse::Campaign::PausedReason::TaggedSymbol
325
- ),
326
- present_count: Float,
290
+ metadata_keys: T::Array[String],
327
291
  row_stats:
328
292
  Revox::Models::CampaignRetrieveResponse::Campaign::RowStats,
329
293
  scheduled_at: T.anything,
@@ -347,11 +311,6 @@ module Revox
347
311
  end
348
312
  OrSymbol = T.type_alias { T.any(Symbol, String) }
349
313
 
350
- DRAFT =
351
- T.let(
352
- :draft,
353
- Revox::Models::CampaignRetrieveResponse::Campaign::Status::TaggedSymbol
354
- )
355
314
  RUNNING =
356
315
  T.let(
357
316
  :running,
@@ -379,40 +338,6 @@ module Revox
379
338
  end
380
339
  end
381
340
 
382
- module Type
383
- extend Revox::Internal::Type::Enum
384
-
385
- TaggedSymbol =
386
- T.type_alias do
387
- T.all(
388
- Symbol,
389
- Revox::Models::CampaignRetrieveResponse::Campaign::Type
390
- )
391
- end
392
- OrSymbol = T.type_alias { T.any(Symbol, String) }
393
-
394
- REGULAR =
395
- T.let(
396
- :regular,
397
- Revox::Models::CampaignRetrieveResponse::Campaign::Type::TaggedSymbol
398
- )
399
- JUMP_IN =
400
- T.let(
401
- :jump_in,
402
- Revox::Models::CampaignRetrieveResponse::Campaign::Type::TaggedSymbol
403
- )
404
-
405
- sig do
406
- override.returns(
407
- T::Array[
408
- Revox::Models::CampaignRetrieveResponse::Campaign::Type::TaggedSymbol
409
- ]
410
- )
411
- end
412
- def self.values
413
- end
414
- end
415
-
416
341
  class Assistant < Revox::Internal::Type::BaseModel
417
342
  OrHash =
418
343
  T.type_alias do
@@ -521,14 +446,6 @@ module Revox
521
446
  sig { returns(T.nilable(String)) }
522
447
  attr_accessor :email_notification_address
523
448
 
524
- # The language used for the notification email content. One of "en" or "fr".
525
- sig do
526
- returns(
527
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
528
- )
529
- end
530
- attr_accessor :email_notification_language
531
-
532
449
  # Which call outcomes trigger an email notification. E.g. ["interested",
533
450
  # "completed", "none"]. Use "none" when outcome is null.
534
451
  sig do
@@ -564,8 +481,8 @@ module Revox
564
481
  sig { returns(T.nilable(String)) }
565
482
  attr_accessor :from_phone_number
566
483
 
567
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
568
- # not configured.
484
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
485
+ # transfer is not configured.
569
486
  sig do
570
487
  returns(
571
488
  T.nilable(
@@ -628,6 +545,11 @@ module Revox
628
545
  end
629
546
  attr_writer :position
630
547
 
548
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
549
+ # variables. Null when no lookup is configured.
550
+ sig { returns(T.nilable(String)) }
551
+ attr_accessor :precall_lookup_url
552
+
631
553
  sig { returns(String) }
632
554
  attr_accessor :prompt
633
555
 
@@ -749,9 +671,18 @@ module Revox
749
671
  sig { returns(Float) }
750
672
  attr_accessor :thinking_sound_volume
751
673
 
752
- # Phone number to transfer calls to when users request to speak to a human agent.
753
- sig { returns(T.nilable(String)) }
754
- attr_accessor :transfer_phone_number
674
+ # Where calls can be transferred to when users ask to speak to a human. Null or
675
+ # empty when transfer is not configured.
676
+ sig do
677
+ returns(
678
+ T.nilable(
679
+ T::Array[
680
+ Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::TransferDestination
681
+ ]
682
+ )
683
+ )
684
+ end
685
+ attr_accessor :transfer_destinations
755
686
 
756
687
  sig do
757
688
  returns(
@@ -861,6 +792,12 @@ module Revox
861
792
  end
862
793
  attr_writer :faq_items
863
794
 
795
+ sig { returns(T.nilable(T::Boolean)) }
796
+ attr_reader :is_inbound_receptionist
797
+
798
+ sig { params(is_inbound_receptionist: T::Boolean).void }
799
+ attr_writer :is_inbound_receptionist
800
+
864
801
  sig { returns(T.nilable(T::Boolean)) }
865
802
  attr_reader :is_realestate_assistant
866
803
 
@@ -905,8 +842,6 @@ module Revox
905
842
  ]
906
843
  ),
907
844
  email_notification_address: T.nilable(String),
908
- email_notification_language:
909
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationLanguage::OrSymbol,
910
845
  email_notification_outcomes:
911
846
  T.nilable(
912
847
  T::Array[
@@ -940,6 +875,7 @@ module Revox
940
875
  T.nilable(
941
876
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Position::OrHash
942
877
  ),
878
+ precall_lookup_url: T.nilable(String),
943
879
  prompt: String,
944
880
  prompt_flow:
945
881
  T.nilable(
@@ -970,7 +906,12 @@ module Revox
970
906
  ),
971
907
  thinking_sound_probability: Float,
972
908
  thinking_sound_volume: Float,
973
- transfer_phone_number: T.nilable(String),
909
+ transfer_destinations:
910
+ T.nilable(
911
+ T::Array[
912
+ Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::TransferDestination::OrHash
913
+ ]
914
+ ),
974
915
  type:
975
916
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Type::OrSymbol,
976
917
  updated_at: T.anything,
@@ -994,6 +935,7 @@ module Revox
994
935
  T::Array[
995
936
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::FaqItem::OrHash
996
937
  ],
938
+ is_inbound_receptionist: T::Boolean,
997
939
  is_realestate_assistant: T::Boolean,
998
940
  pending_faq_count: Float
999
941
  ).returns(T.attached_class)
@@ -1022,8 +964,6 @@ module Revox
1022
964
  # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
1023
965
  # bob@y.com").
1024
966
  email_notification_address:,
1025
- # The language used for the notification email content. One of "en" or "fr".
1026
- email_notification_language:,
1027
967
  # Which call outcomes trigger an email notification. E.g. ["interested",
1028
968
  # "completed", "none"]. Use "none" when outcome is null.
1029
969
  email_notification_outcomes:,
@@ -1035,8 +975,8 @@ module Revox
1035
975
  # Override the default outbound phone number for calls placed with this assistant.
1036
976
  # When null, the organization's default phone number is used.
1037
977
  from_phone_number:,
1038
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1039
- # not configured.
978
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
979
+ # transfer is not configured.
1040
980
  human_transfer_mode:,
1041
981
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
1042
982
  # skip turns to navigate phone menus.
@@ -1055,6 +995,9 @@ module Revox
1055
995
  name:,
1056
996
  organization_id:,
1057
997
  position:,
998
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
999
+ # variables. Null when no lookup is configured.
1000
+ precall_lookup_url:,
1058
1001
  prompt:,
1059
1002
  prompt_flow:,
1060
1003
  slack:,
@@ -1086,8 +1029,9 @@ module Revox
1086
1029
  thinking_sound_probability:,
1087
1030
  # Volume of the thinking sound (0 = silent, 1 = max).
1088
1031
  thinking_sound_volume:,
1089
- # Phone number to transfer calls to when users request to speak to a human agent.
1090
- transfer_phone_number:,
1032
+ # Where calls can be transferred to when users ask to speak to a human. Null or
1033
+ # empty when transfer is not configured.
1034
+ transfer_destinations:,
1091
1035
  type:,
1092
1036
  updated_at:,
1093
1037
  voice:,
@@ -1106,6 +1050,7 @@ module Revox
1106
1050
  # The user who created the assistant.
1107
1051
  created_by: nil,
1108
1052
  faq_items: nil,
1053
+ is_inbound_receptionist: nil,
1109
1054
  is_realestate_assistant: nil,
1110
1055
  pending_faq_count: nil
1111
1056
  )
@@ -1144,8 +1089,6 @@ module Revox
1144
1089
  ]
1145
1090
  ),
1146
1091
  email_notification_address: T.nilable(String),
1147
- email_notification_language:
1148
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol,
1149
1092
  email_notification_outcomes:
1150
1093
  T.nilable(
1151
1094
  T::Array[
@@ -1174,6 +1117,7 @@ module Revox
1174
1117
  T.nilable(
1175
1118
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Position
1176
1119
  ),
1120
+ precall_lookup_url: T.nilable(String),
1177
1121
  prompt: String,
1178
1122
  prompt_flow:
1179
1123
  T.nilable(
@@ -1204,7 +1148,12 @@ module Revox
1204
1148
  ),
1205
1149
  thinking_sound_probability: Float,
1206
1150
  thinking_sound_volume: Float,
1207
- transfer_phone_number: T.nilable(String),
1151
+ transfer_destinations:
1152
+ T.nilable(
1153
+ T::Array[
1154
+ Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::TransferDestination
1155
+ ]
1156
+ ),
1208
1157
  type:
1209
1158
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Type::TaggedSymbol,
1210
1159
  updated_at: T.anything,
@@ -1228,6 +1177,7 @@ module Revox
1228
1177
  T::Array[
1229
1178
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::FaqItem
1230
1179
  ],
1180
+ is_inbound_receptionist: T::Boolean,
1231
1181
  is_realestate_assistant: T::Boolean,
1232
1182
  pending_faq_count: Float
1233
1183
  }
@@ -1268,21 +1218,6 @@ module Revox
1268
1218
  :requested_callback_later,
1269
1219
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1270
1220
  )
1271
- REQUESTED_CALLBACK_NEW_NUMBER =
1272
- T.let(
1273
- :requested_callback_new_number,
1274
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1275
- )
1276
- DO_NOT_CONTACT =
1277
- T.let(
1278
- :do_not_contact,
1279
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1280
- )
1281
- AI_AVERSE =
1282
- T.let(
1283
- :ai_averse,
1284
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1285
- )
1286
1221
  NONE =
1287
1222
  T.let(
1288
1223
  :none,
@@ -1551,7 +1486,8 @@ module Revox
1551
1486
  sig { returns(String) }
1552
1487
  attr_accessor :calling_window_start_time
1553
1488
 
1554
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1489
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1490
+ # allows. Default: 7200 (2 hours).
1555
1491
  sig { returns(Integer) }
1556
1492
  attr_accessor :retry_delay_seconds
1557
1493
 
@@ -1571,7 +1507,8 @@ module Revox
1571
1507
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1572
1508
  # Examples: '09:00', '10am'. Default: '10:00'.
1573
1509
  calling_window_start_time:,
1574
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1510
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1511
+ # allows. Default: 7200 (2 hours).
1575
1512
  retry_delay_seconds:
1576
1513
  )
1577
1514
  end
@@ -1958,41 +1895,6 @@ module Revox
1958
1895
  end
1959
1896
  end
1960
1897
 
1961
- # The language used for the notification email content. One of "en" or "fr".
1962
- module EmailNotificationLanguage
1963
- extend Revox::Internal::Type::Enum
1964
-
1965
- TaggedSymbol =
1966
- T.type_alias do
1967
- T.all(
1968
- Symbol,
1969
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationLanguage
1970
- )
1971
- end
1972
- OrSymbol = T.type_alias { T.any(Symbol, String) }
1973
-
1974
- EN =
1975
- T.let(
1976
- :en,
1977
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1978
- )
1979
- FR =
1980
- T.let(
1981
- :fr,
1982
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1983
- )
1984
-
1985
- sig do
1986
- override.returns(
1987
- T::Array[
1988
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1989
- ]
1990
- )
1991
- end
1992
- def self.values
1993
- end
1994
- end
1995
-
1996
1898
  module EmailNotificationOutcome
1997
1899
  extend Revox::Internal::Type::Enum
1998
1900
 
@@ -2025,21 +1927,6 @@ module Revox
2025
1927
  :requested_callback_later,
2026
1928
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2027
1929
  )
2028
- REQUESTED_CALLBACK_NEW_NUMBER =
2029
- T.let(
2030
- :requested_callback_new_number,
2031
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2032
- )
2033
- DO_NOT_CONTACT =
2034
- T.let(
2035
- :do_not_contact,
2036
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2037
- )
2038
- AI_AVERSE =
2039
- T.let(
2040
- :ai_averse,
2041
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2042
- )
2043
1930
  NONE =
2044
1931
  T.let(
2045
1932
  :none,
@@ -2096,8 +1983,8 @@ module Revox
2096
1983
  end
2097
1984
  end
2098
1985
 
2099
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
2100
- # not configured.
1986
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
1987
+ # transfer is not configured.
2101
1988
  module HumanTransferMode
2102
1989
  extend Revox::Internal::Type::Enum
2103
1990
 
@@ -2695,9 +2582,17 @@ module Revox
2695
2582
  )
2696
2583
  end
2697
2584
 
2698
- # The Slack channel ID where the notification will be posted.
2699
- sig { returns(String) }
2700
- attr_accessor :channel_id
2585
+ # The Slack channels eligible to receive the notification. When more than one is
2586
+ # configured, the agent prompt may define routing rules to narrow it down per
2587
+ # call; with no such rules every channel here is notified.
2588
+ sig do
2589
+ returns(
2590
+ T::Array[
2591
+ Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Channel
2592
+ ]
2593
+ )
2594
+ end
2595
+ attr_accessor :channels
2701
2596
 
2702
2597
  # The Nango connection ID linking the org's Slack workspace to Revox.
2703
2598
  sig { returns(String) }
@@ -2714,45 +2609,43 @@ module Revox
2714
2609
  end
2715
2610
  attr_accessor :outcomes
2716
2611
 
2717
- # Human-readable Slack channel name, cached for display in the UI.
2718
- sig { returns(T.nilable(String)) }
2719
- attr_accessor :channel_name
2720
-
2721
2612
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2722
2613
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2723
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2724
- # prompt_variables and structured_output keys. When null/empty a default template
2725
- # is used.
2614
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2615
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2616
+ # null/empty a default template is used.
2726
2617
  sig { returns(T.nilable(String)) }
2727
2618
  attr_accessor :template
2728
2619
 
2729
2620
  sig do
2730
2621
  params(
2731
- channel_id: String,
2622
+ channels:
2623
+ T::Array[
2624
+ Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Channel::OrHash
2625
+ ],
2732
2626
  connection_id: String,
2733
2627
  outcomes:
2734
2628
  T::Array[
2735
2629
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Outcome::OrSymbol
2736
2630
  ],
2737
- channel_name: T.nilable(String),
2738
2631
  template: T.nilable(String)
2739
2632
  ).returns(T.attached_class)
2740
2633
  end
2741
2634
  def self.new(
2742
- # The Slack channel ID where the notification will be posted.
2743
- channel_id:,
2635
+ # The Slack channels eligible to receive the notification. When more than one is
2636
+ # configured, the agent prompt may define routing rules to narrow it down per
2637
+ # call; with no such rules every channel here is notified.
2638
+ channels:,
2744
2639
  # The Nango connection ID linking the org's Slack workspace to Revox.
2745
2640
  connection_id:,
2746
2641
  # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2747
2642
  # Use 'none' to notify when outcome is null.
2748
2643
  outcomes:,
2749
- # Human-readable Slack channel name, cached for display in the UI.
2750
- channel_name: nil,
2751
2644
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2752
2645
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2753
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2754
- # prompt_variables and structured_output keys. When null/empty a default template
2755
- # is used.
2646
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2647
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2648
+ # null/empty a default template is used.
2756
2649
  template: nil
2757
2650
  )
2758
2651
  end
@@ -2760,13 +2653,15 @@ module Revox
2760
2653
  sig do
2761
2654
  override.returns(
2762
2655
  {
2763
- channel_id: String,
2656
+ channels:
2657
+ T::Array[
2658
+ Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Channel
2659
+ ],
2764
2660
  connection_id: String,
2765
2661
  outcomes:
2766
2662
  T::Array[
2767
2663
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2768
2664
  ],
2769
- channel_name: T.nilable(String),
2770
2665
  template: T.nilable(String)
2771
2666
  }
2772
2667
  )
@@ -2774,6 +2669,43 @@ module Revox
2774
2669
  def to_hash
2775
2670
  end
2776
2671
 
2672
+ class Channel < Revox::Internal::Type::BaseModel
2673
+ OrHash =
2674
+ T.type_alias do
2675
+ T.any(
2676
+ Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Channel,
2677
+ Revox::Internal::AnyHash
2678
+ )
2679
+ end
2680
+
2681
+ # The Slack channel ID (e.g. 'C01234567').
2682
+ sig { returns(String) }
2683
+ attr_accessor :id
2684
+
2685
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2686
+ # LLM when the agent prompt routes by channel name.
2687
+ sig { returns(T.nilable(String)) }
2688
+ attr_accessor :name
2689
+
2690
+ sig do
2691
+ params(id: String, name: T.nilable(String)).returns(
2692
+ T.attached_class
2693
+ )
2694
+ end
2695
+ def self.new(
2696
+ # The Slack channel ID (e.g. 'C01234567').
2697
+ id:,
2698
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2699
+ # LLM when the agent prompt routes by channel name.
2700
+ name: nil
2701
+ )
2702
+ end
2703
+
2704
+ sig { override.returns({ id: String, name: T.nilable(String) }) }
2705
+ def to_hash
2706
+ end
2707
+ end
2708
+
2777
2709
  module Outcome
2778
2710
  extend Revox::Internal::Type::Enum
2779
2711
 
@@ -2806,21 +2738,6 @@ module Revox
2806
2738
  :requested_callback_later,
2807
2739
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2808
2740
  )
2809
- REQUESTED_CALLBACK_NEW_NUMBER =
2810
- T.let(
2811
- :requested_callback_new_number,
2812
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2813
- )
2814
- DO_NOT_CONTACT =
2815
- T.let(
2816
- :do_not_contact,
2817
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2818
- )
2819
- AI_AVERSE =
2820
- T.let(
2821
- :ai_averse,
2822
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2823
- )
2824
2741
  NONE =
2825
2742
  T.let(
2826
2743
  :none,
@@ -3135,6 +3052,34 @@ module Revox
3135
3052
  end
3136
3053
  end
3137
3054
 
3055
+ class TransferDestination < Revox::Internal::Type::BaseModel
3056
+ OrHash =
3057
+ T.type_alias do
3058
+ T.any(
3059
+ Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::TransferDestination,
3060
+ Revox::Internal::AnyHash
3061
+ )
3062
+ end
3063
+
3064
+ sig { returns(String) }
3065
+ attr_accessor :label
3066
+
3067
+ sig { returns(String) }
3068
+ attr_accessor :phone_number
3069
+
3070
+ sig do
3071
+ params(label: String, phone_number: String).returns(
3072
+ T.attached_class
3073
+ )
3074
+ end
3075
+ def self.new(label:, phone_number:)
3076
+ end
3077
+
3078
+ sig { override.returns({ label: String, phone_number: String }) }
3079
+ def to_hash
3080
+ end
3081
+ end
3082
+
3138
3083
  module Type
3139
3084
  extend Revox::Internal::Type::Enum
3140
3085
 
@@ -3215,7 +3160,7 @@ module Revox
3215
3160
  attr_writer :model
3216
3161
 
3217
3162
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3218
- # 0.7–1.2. Default is 1.0.
3163
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3219
3164
  sig { returns(T.nilable(Float)) }
3220
3165
  attr_reader :speed
3221
3166
 
@@ -3250,7 +3195,7 @@ module Revox
3250
3195
  # for other providers.
3251
3196
  model: nil,
3252
3197
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3253
- # 0.7–1.2. Default is 1.0.
3198
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3254
3199
  speed: nil,
3255
3200
  # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
3256
3201
  # providers.
@@ -3297,6 +3242,11 @@ module Revox
3297
3242
  :elevenlabs,
3298
3243
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3299
3244
  )
3245
+ GRADIUM =
3246
+ T.let(
3247
+ :gradium,
3248
+ Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3249
+ )
3300
3250
 
3301
3251
  sig do
3302
3252
  override.returns(
@@ -3527,21 +3477,6 @@ module Revox
3527
3477
  :requested_callback_later,
3528
3478
  Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3529
3479
  )
3530
- REQUESTED_CALLBACK_NEW_NUMBER =
3531
- T.let(
3532
- :requested_callback_new_number,
3533
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3534
- )
3535
- DO_NOT_CONTACT =
3536
- T.let(
3537
- :do_not_contact,
3538
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3539
- )
3540
- AI_AVERSE =
3541
- T.let(
3542
- :ai_averse,
3543
- Revox::Models::CampaignRetrieveResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3544
- )
3545
3480
  NONE =
3546
3481
  T.let(
3547
3482
  :none,
@@ -3910,7 +3845,8 @@ module Revox
3910
3845
  sig { returns(String) }
3911
3846
  attr_accessor :calling_window_start_time
3912
3847
 
3913
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
3848
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
3849
+ # allows. Default: 7200 (2 hours).
3914
3850
  sig { returns(Integer) }
3915
3851
  attr_accessor :retry_delay_seconds
3916
3852
 
@@ -3930,7 +3866,8 @@ module Revox
3930
3866
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
3931
3867
  # Examples: '09:00', '10am'. Default: '10:00'.
3932
3868
  calling_window_start_time:,
3933
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
3869
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
3870
+ # allows. Default: 7200 (2 hours).
3934
3871
  retry_delay_seconds:
3935
3872
  )
3936
3873
  end
@@ -4040,40 +3977,6 @@ module Revox
4040
3977
  end
4041
3978
  end
4042
3979
 
4043
- module PausedReason
4044
- extend Revox::Internal::Type::Enum
4045
-
4046
- TaggedSymbol =
4047
- T.type_alias do
4048
- T.all(
4049
- Symbol,
4050
- Revox::Models::CampaignRetrieveResponse::Campaign::PausedReason
4051
- )
4052
- end
4053
- OrSymbol = T.type_alias { T.any(Symbol, String) }
4054
-
4055
- MANUAL =
4056
- T.let(
4057
- :manual,
4058
- Revox::Models::CampaignRetrieveResponse::Campaign::PausedReason::TaggedSymbol
4059
- )
4060
- NO_PRESENCE =
4061
- T.let(
4062
- :no_presence,
4063
- Revox::Models::CampaignRetrieveResponse::Campaign::PausedReason::TaggedSymbol
4064
- )
4065
-
4066
- sig do
4067
- override.returns(
4068
- T::Array[
4069
- Revox::Models::CampaignRetrieveResponse::Campaign::PausedReason::TaggedSymbol
4070
- ]
4071
- )
4072
- end
4073
- def self.values
4074
- end
4075
- end
4076
-
4077
3980
  class RowStats < Revox::Internal::Type::BaseModel
4078
3981
  OrHash =
4079
3982
  T.type_alias do
@@ -4092,12 +3995,18 @@ module Revox
4092
3995
  sig { returns(Float) }
4093
3996
  attr_accessor :failed
4094
3997
 
3998
+ sig { returns(Float) }
3999
+ attr_accessor :not_launched
4000
+
4095
4001
  sig { returns(Float) }
4096
4002
  attr_accessor :pending
4097
4003
 
4098
4004
  sig { returns(Float) }
4099
4005
  attr_accessor :retry_
4100
4006
 
4007
+ sig { returns(Float) }
4008
+ attr_accessor :skipped
4009
+
4101
4010
  sig { returns(Float) }
4102
4011
  attr_accessor :total
4103
4012
 
@@ -4106,12 +4015,23 @@ module Revox
4106
4015
  calling: Float,
4107
4016
  completed: Float,
4108
4017
  failed: Float,
4018
+ not_launched: Float,
4109
4019
  pending: Float,
4110
4020
  retry_: Float,
4021
+ skipped: Float,
4111
4022
  total: Float
4112
4023
  ).returns(T.attached_class)
4113
4024
  end
4114
- def self.new(calling:, completed:, failed:, pending:, retry_:, total:)
4025
+ def self.new(
4026
+ calling:,
4027
+ completed:,
4028
+ failed:,
4029
+ not_launched:,
4030
+ pending:,
4031
+ retry_:,
4032
+ skipped:,
4033
+ total:
4034
+ )
4115
4035
  end
4116
4036
 
4117
4037
  sig do
@@ -4120,8 +4040,10 @@ module Revox
4120
4040
  calling: Float,
4121
4041
  completed: Float,
4122
4042
  failed: Float,
4043
+ not_launched: Float,
4123
4044
  pending: Float,
4124
4045
  retry_: Float,
4046
+ skipped: Float,
4125
4047
  total: Float
4126
4048
  }
4127
4049
  )