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
@@ -62,19 +62,9 @@ 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
-
72
65
  sig { returns(T.anything) }
73
66
  attr_accessor :updated_at
74
67
 
75
- sig { returns(T.nilable(String)) }
76
- attr_accessor :active_takeover_call_id
77
-
78
68
  sig do
79
69
  returns(
80
70
  T.nilable(Revox::Models::CampaignListResponse::Campaign::Assistant)
@@ -152,20 +142,11 @@ module Revox
152
142
  sig { returns(T.nilable(Float)) }
153
143
  attr_accessor :max_concurrent_calls
154
144
 
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
145
+ sig { returns(T.nilable(T::Array[String])) }
146
+ attr_reader :metadata_keys
166
147
 
167
- sig { params(present_count: Float).void }
168
- attr_writer :present_count
148
+ sig { params(metadata_keys: T::Array[String]).void }
149
+ attr_writer :metadata_keys
169
150
 
170
151
  sig do
171
152
  returns(
@@ -216,9 +197,7 @@ module Revox
216
197
  organization_id: String,
217
198
  status:
218
199
  Revox::Models::CampaignListResponse::Campaign::Status::OrSymbol,
219
- type: Revox::Models::CampaignListResponse::Campaign::Type::OrSymbol,
220
200
  updated_at: T.anything,
221
- active_takeover_call_id: T.nilable(String),
222
201
  assistant:
223
202
  Revox::Models::CampaignListResponse::Campaign::Assistant::OrHash,
224
203
  call_retry_config:
@@ -233,11 +212,7 @@ module Revox
233
212
  funnel_stats:
234
213
  Revox::Models::CampaignListResponse::Campaign::FunnelStats::OrHash,
235
214
  max_concurrent_calls: T.nilable(Float),
236
- paused_reason:
237
- T.nilable(
238
- Revox::Models::CampaignListResponse::Campaign::PausedReason::OrSymbol
239
- ),
240
- present_count: Float,
215
+ metadata_keys: T::Array[String],
241
216
  row_stats:
242
217
  Revox::Models::CampaignListResponse::Campaign::RowStats::OrHash,
243
218
  scheduled_at: T.anything,
@@ -253,9 +228,7 @@ module Revox
253
228
  name:,
254
229
  organization_id:,
255
230
  status:,
256
- type:,
257
231
  updated_at:,
258
- active_takeover_call_id: nil,
259
232
  assistant: nil,
260
233
  # Configuration for call retry behavior including time windows, delays, and max
261
234
  # iterations. If not provided, defaults will be used.
@@ -265,8 +238,7 @@ module Revox
265
238
  from_phone_number: nil,
266
239
  funnel_stats: nil,
267
240
  max_concurrent_calls: nil,
268
- paused_reason: nil,
269
- present_count: nil,
241
+ metadata_keys: nil,
270
242
  row_stats: nil,
271
243
  scheduled_at: nil,
272
244
  # The status of the structured output extraction.
@@ -285,10 +257,7 @@ module Revox
285
257
  organization_id: String,
286
258
  status:
287
259
  Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol,
288
- type:
289
- Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol,
290
260
  updated_at: T.anything,
291
- active_takeover_call_id: T.nilable(String),
292
261
  assistant:
293
262
  Revox::Models::CampaignListResponse::Campaign::Assistant,
294
263
  call_retry_config:
@@ -303,11 +272,7 @@ module Revox
303
272
  funnel_stats:
304
273
  Revox::Models::CampaignListResponse::Campaign::FunnelStats,
305
274
  max_concurrent_calls: T.nilable(Float),
306
- paused_reason:
307
- T.nilable(
308
- Revox::Models::CampaignListResponse::Campaign::PausedReason::TaggedSymbol
309
- ),
310
- present_count: Float,
275
+ metadata_keys: T::Array[String],
311
276
  row_stats:
312
277
  Revox::Models::CampaignListResponse::Campaign::RowStats,
313
278
  scheduled_at: T.anything,
@@ -331,11 +296,6 @@ module Revox
331
296
  end
332
297
  OrSymbol = T.type_alias { T.any(Symbol, String) }
333
298
 
334
- DRAFT =
335
- T.let(
336
- :draft,
337
- Revox::Models::CampaignListResponse::Campaign::Status::TaggedSymbol
338
- )
339
299
  RUNNING =
340
300
  T.let(
341
301
  :running,
@@ -363,37 +323,6 @@ module Revox
363
323
  end
364
324
  end
365
325
 
366
- module Type
367
- extend Revox::Internal::Type::Enum
368
-
369
- TaggedSymbol =
370
- T.type_alias do
371
- T.all(Symbol, Revox::Models::CampaignListResponse::Campaign::Type)
372
- end
373
- OrSymbol = T.type_alias { T.any(Symbol, String) }
374
-
375
- REGULAR =
376
- T.let(
377
- :regular,
378
- Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol
379
- )
380
- JUMP_IN =
381
- T.let(
382
- :jump_in,
383
- Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol
384
- )
385
-
386
- sig do
387
- override.returns(
388
- T::Array[
389
- Revox::Models::CampaignListResponse::Campaign::Type::TaggedSymbol
390
- ]
391
- )
392
- end
393
- def self.values
394
- end
395
- end
396
-
397
326
  class Assistant < Revox::Internal::Type::BaseModel
398
327
  OrHash =
399
328
  T.type_alias do
@@ -502,14 +431,6 @@ module Revox
502
431
  sig { returns(T.nilable(String)) }
503
432
  attr_accessor :email_notification_address
504
433
 
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
434
  # Which call outcomes trigger an email notification. E.g. ["interested",
514
435
  # "completed", "none"]. Use "none" when outcome is null.
515
436
  sig do
@@ -545,8 +466,8 @@ module Revox
545
466
  sig { returns(T.nilable(String)) }
546
467
  attr_accessor :from_phone_number
547
468
 
548
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
549
- # not configured.
469
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
470
+ # transfer is not configured.
550
471
  sig do
551
472
  returns(
552
473
  T.nilable(
@@ -609,6 +530,11 @@ module Revox
609
530
  end
610
531
  attr_writer :position
611
532
 
533
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
534
+ # variables. Null when no lookup is configured.
535
+ sig { returns(T.nilable(String)) }
536
+ attr_accessor :precall_lookup_url
537
+
612
538
  sig { returns(String) }
613
539
  attr_accessor :prompt
614
540
 
@@ -730,9 +656,18 @@ module Revox
730
656
  sig { returns(Float) }
731
657
  attr_accessor :thinking_sound_volume
732
658
 
733
- # Phone number to transfer calls to when users request to speak to a human agent.
734
- sig { returns(T.nilable(String)) }
735
- attr_accessor :transfer_phone_number
659
+ # Where calls can be transferred to when users ask to speak to a human. Null or
660
+ # empty when transfer is not configured.
661
+ sig do
662
+ returns(
663
+ T.nilable(
664
+ T::Array[
665
+ Revox::Models::CampaignListResponse::Campaign::Assistant::TransferDestination
666
+ ]
667
+ )
668
+ )
669
+ end
670
+ attr_accessor :transfer_destinations
736
671
 
737
672
  sig do
738
673
  returns(
@@ -842,6 +777,12 @@ module Revox
842
777
  end
843
778
  attr_writer :faq_items
844
779
 
780
+ sig { returns(T.nilable(T::Boolean)) }
781
+ attr_reader :is_inbound_receptionist
782
+
783
+ sig { params(is_inbound_receptionist: T::Boolean).void }
784
+ attr_writer :is_inbound_receptionist
785
+
845
786
  sig { returns(T.nilable(T::Boolean)) }
846
787
  attr_reader :is_realestate_assistant
847
788
 
@@ -886,8 +827,6 @@ module Revox
886
827
  ]
887
828
  ),
888
829
  email_notification_address: T.nilable(String),
889
- email_notification_language:
890
- Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::OrSymbol,
891
830
  email_notification_outcomes:
892
831
  T.nilable(
893
832
  T::Array[
@@ -921,6 +860,7 @@ module Revox
921
860
  T.nilable(
922
861
  Revox::Models::CampaignListResponse::Campaign::Assistant::Position::OrHash
923
862
  ),
863
+ precall_lookup_url: T.nilable(String),
924
864
  prompt: String,
925
865
  prompt_flow:
926
866
  T.nilable(
@@ -951,7 +891,12 @@ module Revox
951
891
  ),
952
892
  thinking_sound_probability: Float,
953
893
  thinking_sound_volume: Float,
954
- transfer_phone_number: T.nilable(String),
894
+ transfer_destinations:
895
+ T.nilable(
896
+ T::Array[
897
+ Revox::Models::CampaignListResponse::Campaign::Assistant::TransferDestination::OrHash
898
+ ]
899
+ ),
955
900
  type:
956
901
  Revox::Models::CampaignListResponse::Campaign::Assistant::Type::OrSymbol,
957
902
  updated_at: T.anything,
@@ -975,6 +920,7 @@ module Revox
975
920
  T::Array[
976
921
  Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem::OrHash
977
922
  ],
923
+ is_inbound_receptionist: T::Boolean,
978
924
  is_realestate_assistant: T::Boolean,
979
925
  pending_faq_count: Float
980
926
  ).returns(T.attached_class)
@@ -1003,8 +949,6 @@ module Revox
1003
949
  # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
1004
950
  # bob@y.com").
1005
951
  email_notification_address:,
1006
- # The language used for the notification email content. One of "en" or "fr".
1007
- email_notification_language:,
1008
952
  # Which call outcomes trigger an email notification. E.g. ["interested",
1009
953
  # "completed", "none"]. Use "none" when outcome is null.
1010
954
  email_notification_outcomes:,
@@ -1016,8 +960,8 @@ module Revox
1016
960
  # Override the default outbound phone number for calls placed with this assistant.
1017
961
  # When null, the organization's default phone number is used.
1018
962
  from_phone_number:,
1019
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1020
- # not configured.
963
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
964
+ # transfer is not configured.
1021
965
  human_transfer_mode:,
1022
966
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
1023
967
  # skip turns to navigate phone menus.
@@ -1036,6 +980,9 @@ module Revox
1036
980
  name:,
1037
981
  organization_id:,
1038
982
  position:,
983
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
984
+ # variables. Null when no lookup is configured.
985
+ precall_lookup_url:,
1039
986
  prompt:,
1040
987
  prompt_flow:,
1041
988
  slack:,
@@ -1067,8 +1014,9 @@ module Revox
1067
1014
  thinking_sound_probability:,
1068
1015
  # Volume of the thinking sound (0 = silent, 1 = max).
1069
1016
  thinking_sound_volume:,
1070
- # Phone number to transfer calls to when users request to speak to a human agent.
1071
- transfer_phone_number:,
1017
+ # Where calls can be transferred to when users ask to speak to a human. Null or
1018
+ # empty when transfer is not configured.
1019
+ transfer_destinations:,
1072
1020
  type:,
1073
1021
  updated_at:,
1074
1022
  voice:,
@@ -1087,6 +1035,7 @@ module Revox
1087
1035
  # The user who created the assistant.
1088
1036
  created_by: nil,
1089
1037
  faq_items: nil,
1038
+ is_inbound_receptionist: nil,
1090
1039
  is_realestate_assistant: nil,
1091
1040
  pending_faq_count: nil
1092
1041
  )
@@ -1125,8 +1074,6 @@ module Revox
1125
1074
  ]
1126
1075
  ),
1127
1076
  email_notification_address: T.nilable(String),
1128
- email_notification_language:
1129
- Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol,
1130
1077
  email_notification_outcomes:
1131
1078
  T.nilable(
1132
1079
  T::Array[
@@ -1155,6 +1102,7 @@ module Revox
1155
1102
  T.nilable(
1156
1103
  Revox::Models::CampaignListResponse::Campaign::Assistant::Position
1157
1104
  ),
1105
+ precall_lookup_url: T.nilable(String),
1158
1106
  prompt: String,
1159
1107
  prompt_flow:
1160
1108
  T.nilable(
@@ -1185,7 +1133,12 @@ module Revox
1185
1133
  ),
1186
1134
  thinking_sound_probability: Float,
1187
1135
  thinking_sound_volume: Float,
1188
- transfer_phone_number: T.nilable(String),
1136
+ transfer_destinations:
1137
+ T.nilable(
1138
+ T::Array[
1139
+ Revox::Models::CampaignListResponse::Campaign::Assistant::TransferDestination
1140
+ ]
1141
+ ),
1189
1142
  type:
1190
1143
  Revox::Models::CampaignListResponse::Campaign::Assistant::Type::TaggedSymbol,
1191
1144
  updated_at: T.anything,
@@ -1209,6 +1162,7 @@ module Revox
1209
1162
  T::Array[
1210
1163
  Revox::Models::CampaignListResponse::Campaign::Assistant::FaqItem
1211
1164
  ],
1165
+ is_inbound_receptionist: T::Boolean,
1212
1166
  is_realestate_assistant: T::Boolean,
1213
1167
  pending_faq_count: Float
1214
1168
  }
@@ -1249,21 +1203,6 @@ module Revox
1249
1203
  :requested_callback_later,
1250
1204
  Revox::Models::CampaignListResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1251
1205
  )
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
1206
  NONE =
1268
1207
  T.let(
1269
1208
  :none,
@@ -1532,7 +1471,8 @@ module Revox
1532
1471
  sig { returns(String) }
1533
1472
  attr_accessor :calling_window_start_time
1534
1473
 
1535
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1474
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1475
+ # allows. Default: 7200 (2 hours).
1536
1476
  sig { returns(Integer) }
1537
1477
  attr_accessor :retry_delay_seconds
1538
1478
 
@@ -1552,7 +1492,8 @@ module Revox
1552
1492
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1553
1493
  # Examples: '09:00', '10am'. Default: '10:00'.
1554
1494
  calling_window_start_time:,
1555
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1495
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1496
+ # allows. Default: 7200 (2 hours).
1556
1497
  retry_delay_seconds:
1557
1498
  )
1558
1499
  end
@@ -1939,41 +1880,6 @@ module Revox
1939
1880
  end
1940
1881
  end
1941
1882
 
1942
- # The language used for the notification email content. One of "en" or "fr".
1943
- module EmailNotificationLanguage
1944
- extend Revox::Internal::Type::Enum
1945
-
1946
- TaggedSymbol =
1947
- T.type_alias do
1948
- T.all(
1949
- Symbol,
1950
- Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage
1951
- )
1952
- end
1953
- OrSymbol = T.type_alias { T.any(Symbol, String) }
1954
-
1955
- EN =
1956
- T.let(
1957
- :en,
1958
- Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1959
- )
1960
- FR =
1961
- T.let(
1962
- :fr,
1963
- Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1964
- )
1965
-
1966
- sig do
1967
- override.returns(
1968
- T::Array[
1969
- Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1970
- ]
1971
- )
1972
- end
1973
- def self.values
1974
- end
1975
- end
1976
-
1977
1883
  module EmailNotificationOutcome
1978
1884
  extend Revox::Internal::Type::Enum
1979
1885
 
@@ -2006,21 +1912,6 @@ module Revox
2006
1912
  :requested_callback_later,
2007
1913
  Revox::Models::CampaignListResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2008
1914
  )
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
1915
  NONE =
2025
1916
  T.let(
2026
1917
  :none,
@@ -2077,8 +1968,8 @@ module Revox
2077
1968
  end
2078
1969
  end
2079
1970
 
2080
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
2081
- # not configured.
1971
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
1972
+ # transfer is not configured.
2082
1973
  module HumanTransferMode
2083
1974
  extend Revox::Internal::Type::Enum
2084
1975
 
@@ -2676,9 +2567,17 @@ module Revox
2676
2567
  )
2677
2568
  end
2678
2569
 
2679
- # The Slack channel ID where the notification will be posted.
2680
- sig { returns(String) }
2681
- attr_accessor :channel_id
2570
+ # The Slack channels eligible to receive the notification. When more than one is
2571
+ # configured, the agent prompt may define routing rules to narrow it down per
2572
+ # call; with no such rules every channel here is notified.
2573
+ sig do
2574
+ returns(
2575
+ T::Array[
2576
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Channel
2577
+ ]
2578
+ )
2579
+ end
2580
+ attr_accessor :channels
2682
2581
 
2683
2582
  # The Nango connection ID linking the org's Slack workspace to Revox.
2684
2583
  sig { returns(String) }
@@ -2695,45 +2594,43 @@ module Revox
2695
2594
  end
2696
2595
  attr_accessor :outcomes
2697
2596
 
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
2597
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2703
2598
  # {{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.
2599
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2600
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2601
+ # null/empty a default template is used.
2707
2602
  sig { returns(T.nilable(String)) }
2708
2603
  attr_accessor :template
2709
2604
 
2710
2605
  sig do
2711
2606
  params(
2712
- channel_id: String,
2607
+ channels:
2608
+ T::Array[
2609
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Channel::OrHash
2610
+ ],
2713
2611
  connection_id: String,
2714
2612
  outcomes:
2715
2613
  T::Array[
2716
2614
  Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::OrSymbol
2717
2615
  ],
2718
- channel_name: T.nilable(String),
2719
2616
  template: T.nilable(String)
2720
2617
  ).returns(T.attached_class)
2721
2618
  end
2722
2619
  def self.new(
2723
- # The Slack channel ID where the notification will be posted.
2724
- channel_id:,
2620
+ # The Slack channels eligible to receive the notification. When more than one is
2621
+ # configured, the agent prompt may define routing rules to narrow it down per
2622
+ # call; with no such rules every channel here is notified.
2623
+ channels:,
2725
2624
  # The Nango connection ID linking the org's Slack workspace to Revox.
2726
2625
  connection_id:,
2727
2626
  # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2728
2627
  # Use 'none' to notify when outcome is null.
2729
2628
  outcomes:,
2730
- # Human-readable Slack channel name, cached for display in the UI.
2731
- channel_name: nil,
2732
2629
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2733
2630
  # {{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.
2631
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2632
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2633
+ # null/empty a default template is used.
2737
2634
  template: nil
2738
2635
  )
2739
2636
  end
@@ -2741,13 +2638,15 @@ module Revox
2741
2638
  sig do
2742
2639
  override.returns(
2743
2640
  {
2744
- channel_id: String,
2641
+ channels:
2642
+ T::Array[
2643
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Channel
2644
+ ],
2745
2645
  connection_id: String,
2746
2646
  outcomes:
2747
2647
  T::Array[
2748
2648
  Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2749
2649
  ],
2750
- channel_name: T.nilable(String),
2751
2650
  template: T.nilable(String)
2752
2651
  }
2753
2652
  )
@@ -2755,6 +2654,43 @@ module Revox
2755
2654
  def to_hash
2756
2655
  end
2757
2656
 
2657
+ class Channel < Revox::Internal::Type::BaseModel
2658
+ OrHash =
2659
+ T.type_alias do
2660
+ T.any(
2661
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Channel,
2662
+ Revox::Internal::AnyHash
2663
+ )
2664
+ end
2665
+
2666
+ # The Slack channel ID (e.g. 'C01234567').
2667
+ sig { returns(String) }
2668
+ attr_accessor :id
2669
+
2670
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2671
+ # LLM when the agent prompt routes by channel name.
2672
+ sig { returns(T.nilable(String)) }
2673
+ attr_accessor :name
2674
+
2675
+ sig do
2676
+ params(id: String, name: T.nilable(String)).returns(
2677
+ T.attached_class
2678
+ )
2679
+ end
2680
+ def self.new(
2681
+ # The Slack channel ID (e.g. 'C01234567').
2682
+ id:,
2683
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2684
+ # LLM when the agent prompt routes by channel name.
2685
+ name: nil
2686
+ )
2687
+ end
2688
+
2689
+ sig { override.returns({ id: String, name: T.nilable(String) }) }
2690
+ def to_hash
2691
+ end
2692
+ end
2693
+
2758
2694
  module Outcome
2759
2695
  extend Revox::Internal::Type::Enum
2760
2696
 
@@ -2787,21 +2723,6 @@ module Revox
2787
2723
  :requested_callback_later,
2788
2724
  Revox::Models::CampaignListResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2789
2725
  )
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
2726
  NONE =
2806
2727
  T.let(
2807
2728
  :none,
@@ -3116,6 +3037,34 @@ module Revox
3116
3037
  end
3117
3038
  end
3118
3039
 
3040
+ class TransferDestination < Revox::Internal::Type::BaseModel
3041
+ OrHash =
3042
+ T.type_alias do
3043
+ T.any(
3044
+ Revox::Models::CampaignListResponse::Campaign::Assistant::TransferDestination,
3045
+ Revox::Internal::AnyHash
3046
+ )
3047
+ end
3048
+
3049
+ sig { returns(String) }
3050
+ attr_accessor :label
3051
+
3052
+ sig { returns(String) }
3053
+ attr_accessor :phone_number
3054
+
3055
+ sig do
3056
+ params(label: String, phone_number: String).returns(
3057
+ T.attached_class
3058
+ )
3059
+ end
3060
+ def self.new(label:, phone_number:)
3061
+ end
3062
+
3063
+ sig { override.returns({ label: String, phone_number: String }) }
3064
+ def to_hash
3065
+ end
3066
+ end
3067
+
3119
3068
  module Type
3120
3069
  extend Revox::Internal::Type::Enum
3121
3070
 
@@ -3196,7 +3145,7 @@ module Revox
3196
3145
  attr_writer :model
3197
3146
 
3198
3147
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3199
- # 0.7–1.2. Default is 1.0.
3148
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3200
3149
  sig { returns(T.nilable(Float)) }
3201
3150
  attr_reader :speed
3202
3151
 
@@ -3231,7 +3180,7 @@ module Revox
3231
3180
  # for other providers.
3232
3181
  model: nil,
3233
3182
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3234
- # 0.7–1.2. Default is 1.0.
3183
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3235
3184
  speed: nil,
3236
3185
  # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
3237
3186
  # providers.
@@ -3278,6 +3227,11 @@ module Revox
3278
3227
  :elevenlabs,
3279
3228
  Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3280
3229
  )
3230
+ GRADIUM =
3231
+ T.let(
3232
+ :gradium,
3233
+ Revox::Models::CampaignListResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3234
+ )
3281
3235
 
3282
3236
  sig do
3283
3237
  override.returns(
@@ -3508,21 +3462,6 @@ module Revox
3508
3462
  :requested_callback_later,
3509
3463
  Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3510
3464
  )
3511
- REQUESTED_CALLBACK_NEW_NUMBER =
3512
- T.let(
3513
- :requested_callback_new_number,
3514
- Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3515
- )
3516
- DO_NOT_CONTACT =
3517
- T.let(
3518
- :do_not_contact,
3519
- Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3520
- )
3521
- AI_AVERSE =
3522
- T.let(
3523
- :ai_averse,
3524
- Revox::Models::CampaignListResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3525
- )
3526
3465
  NONE =
3527
3466
  T.let(
3528
3467
  :none,
@@ -3891,7 +3830,8 @@ module Revox
3891
3830
  sig { returns(String) }
3892
3831
  attr_accessor :calling_window_start_time
3893
3832
 
3894
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
3833
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
3834
+ # allows. Default: 7200 (2 hours).
3895
3835
  sig { returns(Integer) }
3896
3836
  attr_accessor :retry_delay_seconds
3897
3837
 
@@ -3911,7 +3851,8 @@ module Revox
3911
3851
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
3912
3852
  # Examples: '09:00', '10am'. Default: '10:00'.
3913
3853
  calling_window_start_time:,
3914
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
3854
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
3855
+ # allows. Default: 7200 (2 hours).
3915
3856
  retry_delay_seconds:
3916
3857
  )
3917
3858
  end
@@ -4021,40 +3962,6 @@ module Revox
4021
3962
  end
4022
3963
  end
4023
3964
 
4024
- module PausedReason
4025
- extend Revox::Internal::Type::Enum
4026
-
4027
- TaggedSymbol =
4028
- T.type_alias do
4029
- T.all(
4030
- Symbol,
4031
- Revox::Models::CampaignListResponse::Campaign::PausedReason
4032
- )
4033
- end
4034
- OrSymbol = T.type_alias { T.any(Symbol, String) }
4035
-
4036
- MANUAL =
4037
- T.let(
4038
- :manual,
4039
- Revox::Models::CampaignListResponse::Campaign::PausedReason::TaggedSymbol
4040
- )
4041
- NO_PRESENCE =
4042
- T.let(
4043
- :no_presence,
4044
- Revox::Models::CampaignListResponse::Campaign::PausedReason::TaggedSymbol
4045
- )
4046
-
4047
- sig do
4048
- override.returns(
4049
- T::Array[
4050
- Revox::Models::CampaignListResponse::Campaign::PausedReason::TaggedSymbol
4051
- ]
4052
- )
4053
- end
4054
- def self.values
4055
- end
4056
- end
4057
-
4058
3965
  class RowStats < Revox::Internal::Type::BaseModel
4059
3966
  OrHash =
4060
3967
  T.type_alias do
@@ -4073,12 +3980,18 @@ module Revox
4073
3980
  sig { returns(Float) }
4074
3981
  attr_accessor :failed
4075
3982
 
3983
+ sig { returns(Float) }
3984
+ attr_accessor :not_launched
3985
+
4076
3986
  sig { returns(Float) }
4077
3987
  attr_accessor :pending
4078
3988
 
4079
3989
  sig { returns(Float) }
4080
3990
  attr_accessor :retry_
4081
3991
 
3992
+ sig { returns(Float) }
3993
+ attr_accessor :skipped
3994
+
4082
3995
  sig { returns(Float) }
4083
3996
  attr_accessor :total
4084
3997
 
@@ -4087,12 +4000,23 @@ module Revox
4087
4000
  calling: Float,
4088
4001
  completed: Float,
4089
4002
  failed: Float,
4003
+ not_launched: Float,
4090
4004
  pending: Float,
4091
4005
  retry_: Float,
4006
+ skipped: Float,
4092
4007
  total: Float
4093
4008
  ).returns(T.attached_class)
4094
4009
  end
4095
- def self.new(calling:, completed:, failed:, pending:, retry_:, total:)
4010
+ def self.new(
4011
+ calling:,
4012
+ completed:,
4013
+ failed:,
4014
+ not_launched:,
4015
+ pending:,
4016
+ retry_:,
4017
+ skipped:,
4018
+ total:
4019
+ )
4096
4020
  end
4097
4021
 
4098
4022
  sig do
@@ -4101,8 +4025,10 @@ module Revox
4101
4025
  calling: Float,
4102
4026
  completed: Float,
4103
4027
  failed: Float,
4028
+ not_launched: Float,
4104
4029
  pending: Float,
4105
4030
  retry_: Float,
4031
+ skipped: Float,
4106
4032
  total: Float
4107
4033
  }
4108
4034
  )