revox 0.2.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 (208) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/README.md +38 -38
  4. data/lib/revox/client.rb +8 -0
  5. data/lib/revox/internal/type/base_model.rb +3 -3
  6. data/lib/revox/models/assistant_clone_params.rb +20 -0
  7. data/lib/revox/models/assistant_clone_response.rb +1616 -0
  8. data/lib/revox/models/assistant_create_params.rb +90 -66
  9. data/lib/revox/models/assistant_create_response.rb +87 -65
  10. data/lib/revox/models/assistant_list_response.rb +87 -65
  11. data/lib/revox/models/assistant_retrieve_response.rb +86 -65
  12. data/lib/revox/models/assistant_update_params.rb +90 -66
  13. data/lib/revox/models/assistant_update_response.rb +87 -65
  14. data/lib/revox/models/auth_status_retrieve_params.rb +14 -0
  15. data/lib/revox/models/auth_status_retrieve_response.rb +17 -0
  16. data/lib/revox/models/call_cancel_params.rb +20 -0
  17. data/lib/revox/models/call_cancel_response.rb +16 -0
  18. data/lib/revox/models/call_create_params.rb +117 -90
  19. data/lib/revox/models/call_create_response.rb +680 -90
  20. data/lib/revox/models/call_export_params.rb +203 -0
  21. data/lib/revox/models/call_export_response.rb +22 -0
  22. data/lib/revox/models/call_pause_params.rb +20 -0
  23. data/lib/revox/models/call_pause_response.rb +16 -0
  24. data/lib/revox/models/call_phone_history_params.rb +14 -0
  25. data/lib/revox/models/call_phone_history_response.rb +95 -0
  26. data/lib/revox/models/call_resume_params.rb +20 -0
  27. data/lib/revox/models/call_resume_response.rb +16 -0
  28. data/lib/revox/models/call_retrieve_response.rb +681 -90
  29. data/lib/revox/models/call_search_params.rb +169 -0
  30. data/lib/revox/models/call_search_response.rb +3694 -0
  31. data/lib/revox/models/campaign_create_params.rb +7 -57
  32. data/lib/revox/models/campaign_create_response.rb +108 -119
  33. data/lib/revox/models/campaign_get_rows_response.rb +682 -90
  34. data/lib/revox/models/campaign_list_response.rb +108 -119
  35. data/lib/revox/models/campaign_pause_params.rb +20 -0
  36. data/lib/revox/models/campaign_pause_response.rb +16 -0
  37. data/lib/revox/models/campaign_resume_params.rb +20 -0
  38. data/lib/revox/models/campaign_resume_response.rb +16 -0
  39. data/lib/revox/models/campaign_retrieve_response.rb +108 -119
  40. data/lib/revox/models/campaign_statistics_params.rb +20 -0
  41. data/lib/revox/models/campaign_statistics_response.rb +514 -0
  42. data/lib/revox/models/campaign_update_params.rb +165 -0
  43. data/lib/revox/models/campaign_update_response.rb +2019 -0
  44. data/lib/revox/models/phone_number_delete_params.rb +20 -0
  45. data/lib/revox/models/phone_number_delete_response.rb +16 -0
  46. data/lib/revox/models/phone_number_list_params.rb +14 -0
  47. data/lib/revox/models/phone_number_list_response.rb +1799 -0
  48. data/lib/revox/models/phone_number_update_params.rb +32 -0
  49. data/lib/revox/models/phone_number_update_response.rb +1799 -0
  50. data/lib/revox/models/user_retrieve_params.rb +14 -0
  51. data/lib/revox/models/user_retrieve_response.rb +99 -0
  52. data/lib/revox/models/voice_clone_params.rb +78 -0
  53. data/lib/revox/models/voice_clone_response.rb +40 -0
  54. data/lib/revox/models/voice_delete_params.rb +20 -0
  55. data/lib/revox/models/voice_delete_response.rb +16 -0
  56. data/lib/revox/models/voice_list_response.rb +1 -0
  57. data/lib/revox/models/voice_preview_params.rb +1 -0
  58. data/lib/revox/models/voice_retrieve_params.rb +1 -0
  59. data/lib/revox/models.rb +35 -1
  60. data/lib/revox/resources/assistants.rb +31 -10
  61. data/lib/revox/resources/auth_status.rb +32 -0
  62. data/lib/revox/resources/call.rb +149 -4
  63. data/lib/revox/resources/campaigns.rb +110 -11
  64. data/lib/revox/resources/phone_numbers.rb +74 -0
  65. data/lib/revox/resources/users.rb +17 -3
  66. data/lib/revox/resources/voices.rb +50 -0
  67. data/lib/revox/version.rb +1 -1
  68. data/lib/revox.rb +38 -5
  69. data/rbi/revox/client.rbi +6 -0
  70. data/rbi/revox/models/assistant_clone_params.rbi +33 -0
  71. data/rbi/revox/models/assistant_clone_response.rbi +3351 -0
  72. data/rbi/revox/models/assistant_create_params.rbi +148 -162
  73. data/rbi/revox/models/assistant_create_response.rbi +157 -147
  74. data/rbi/revox/models/assistant_list_response.rbi +157 -147
  75. data/rbi/revox/models/assistant_retrieve_response.rbi +153 -147
  76. data/rbi/revox/models/assistant_update_params.rbi +148 -162
  77. data/rbi/revox/models/assistant_update_response.rbi +157 -147
  78. data/rbi/revox/models/auth_status_retrieve_params.rbi +27 -0
  79. data/rbi/revox/models/auth_status_retrieve_response.rbi +30 -0
  80. data/rbi/revox/models/call_cancel_params.rbi +33 -0
  81. data/rbi/revox/models/call_cancel_response.rbi +23 -0
  82. data/rbi/revox/models/call_create_params.rbi +190 -187
  83. data/rbi/revox/models/call_create_response.rbi +1150 -227
  84. data/rbi/revox/models/call_export_params.rbi +446 -0
  85. data/rbi/revox/models/call_export_response.rbi +26 -0
  86. data/rbi/revox/models/call_pause_params.rbi +31 -0
  87. data/rbi/revox/models/call_pause_response.rbi +23 -0
  88. data/rbi/revox/models/call_phone_history_params.rbi +27 -0
  89. data/rbi/revox/models/call_phone_history_response.rbi +209 -0
  90. data/rbi/revox/models/call_resume_params.rbi +33 -0
  91. data/rbi/revox/models/call_resume_response.rbi +23 -0
  92. data/rbi/revox/models/call_retrieve_response.rbi +1150 -227
  93. data/rbi/revox/models/call_search_params.rbi +281 -0
  94. data/rbi/revox/models/call_search_response.rbi +7504 -0
  95. data/rbi/revox/models/campaign_create_params.rbi +9 -87
  96. data/rbi/revox/models/campaign_create_response.rbi +188 -266
  97. data/rbi/revox/models/campaign_get_rows_response.rbi +1150 -225
  98. data/rbi/revox/models/campaign_list_response.rbi +188 -262
  99. data/rbi/revox/models/campaign_pause_params.rbi +33 -0
  100. data/rbi/revox/models/campaign_pause_response.rbi +23 -0
  101. data/rbi/revox/models/campaign_resume_params.rbi +33 -0
  102. data/rbi/revox/models/campaign_resume_response.rbi +23 -0
  103. data/rbi/revox/models/campaign_retrieve_response.rbi +188 -266
  104. data/rbi/revox/models/campaign_statistics_params.rbi +33 -0
  105. data/rbi/revox/models/campaign_statistics_response.rbi +1069 -0
  106. data/rbi/revox/models/campaign_update_params.rbi +313 -0
  107. data/rbi/revox/models/campaign_update_response.rbi +4092 -0
  108. data/rbi/revox/models/phone_number_delete_params.rbi +33 -0
  109. data/rbi/revox/models/phone_number_delete_response.rbi +26 -0
  110. data/rbi/revox/models/phone_number_list_params.rbi +27 -0
  111. data/rbi/revox/models/phone_number_list_response.rbi +3690 -0
  112. data/rbi/revox/models/phone_number_update_params.rbi +53 -0
  113. data/rbi/revox/models/phone_number_update_response.rbi +3693 -0
  114. data/rbi/revox/models/user_retrieve_params.rbi +27 -0
  115. data/rbi/revox/models/user_retrieve_response.rbi +140 -0
  116. data/rbi/revox/models/voice_clone_params.rbi +141 -0
  117. data/rbi/revox/models/voice_clone_response.rbi +53 -0
  118. data/rbi/revox/models/voice_delete_params.rbi +33 -0
  119. data/rbi/revox/models/voice_delete_response.rbi +23 -0
  120. data/rbi/revox/models/voice_list_response.rbi +5 -0
  121. data/rbi/revox/models/voice_preview_params.rbi +2 -0
  122. data/rbi/revox/models/voice_retrieve_params.rbi +2 -0
  123. data/rbi/revox/models.rbi +35 -1
  124. data/rbi/revox/resources/assistants.rbi +52 -22
  125. data/rbi/revox/resources/auth_status.rbi +21 -0
  126. data/rbi/revox/resources/call.rbi +114 -4
  127. data/rbi/revox/resources/campaigns.rbi +77 -15
  128. data/rbi/revox/resources/phone_numbers.rbi +43 -0
  129. data/rbi/revox/resources/users.rbi +8 -2
  130. data/rbi/revox/resources/voices.rbi +39 -0
  131. data/sig/revox/client.rbs +4 -0
  132. data/sig/revox/models/assistant_clone_params.rbs +20 -0
  133. data/sig/revox/models/assistant_clone_response.rbs +1310 -0
  134. data/sig/revox/models/assistant_create_params.rbs +39 -58
  135. data/sig/revox/models/assistant_create_response.rbs +46 -54
  136. data/sig/revox/models/assistant_list_response.rbs +46 -54
  137. data/sig/revox/models/assistant_retrieve_response.rbs +46 -54
  138. data/sig/revox/models/assistant_update_params.rbs +39 -58
  139. data/sig/revox/models/assistant_update_response.rbs +46 -54
  140. data/sig/revox/models/auth_status_retrieve_params.rbs +15 -0
  141. data/sig/revox/models/auth_status_retrieve_response.rbs +13 -0
  142. data/sig/revox/models/call_cancel_params.rbs +20 -0
  143. data/sig/revox/models/call_cancel_response.rbs +13 -0
  144. data/sig/revox/models/call_create_params.rbs +50 -71
  145. data/sig/revox/models/call_create_response.rbs +473 -77
  146. data/sig/revox/models/call_export_params.rbs +230 -0
  147. data/sig/revox/models/call_export_response.rbs +15 -0
  148. data/sig/revox/models/call_pause_params.rbs +20 -0
  149. data/sig/revox/models/call_pause_response.rbs +13 -0
  150. data/sig/revox/models/call_phone_history_params.rbs +15 -0
  151. data/sig/revox/models/call_phone_history_response.rbs +93 -0
  152. data/sig/revox/models/call_resume_params.rbs +20 -0
  153. data/sig/revox/models/call_resume_response.rbs +13 -0
  154. data/sig/revox/models/call_retrieve_response.rbs +473 -77
  155. data/sig/revox/models/call_search_params.rbs +194 -0
  156. data/sig/revox/models/call_search_response.rbs +3045 -0
  157. data/sig/revox/models/campaign_create_params.rbs +5 -50
  158. data/sig/revox/models/campaign_create_response.rbs +62 -98
  159. data/sig/revox/models/campaign_get_rows_response.rbs +472 -73
  160. data/sig/revox/models/campaign_list_response.rbs +62 -98
  161. data/sig/revox/models/campaign_pause_params.rbs +20 -0
  162. data/sig/revox/models/campaign_pause_response.rbs +13 -0
  163. data/sig/revox/models/campaign_resume_params.rbs +20 -0
  164. data/sig/revox/models/campaign_resume_response.rbs +13 -0
  165. data/sig/revox/models/campaign_retrieve_response.rbs +62 -98
  166. data/sig/revox/models/campaign_statistics_params.rbs +20 -0
  167. data/sig/revox/models/campaign_statistics_response.rbs +489 -0
  168. data/sig/revox/models/campaign_update_params.rbs +135 -0
  169. data/sig/revox/models/campaign_update_response.rbs +1658 -0
  170. data/sig/revox/models/phone_number_delete_params.rbs +20 -0
  171. data/sig/revox/models/phone_number_delete_response.rbs +13 -0
  172. data/sig/revox/models/phone_number_list_params.rbs +15 -0
  173. data/sig/revox/models/phone_number_list_response.rbs +1454 -0
  174. data/sig/revox/models/phone_number_update_params.rbs +32 -0
  175. data/sig/revox/models/phone_number_update_response.rbs +1452 -0
  176. data/sig/revox/models/user_retrieve_params.rbs +14 -0
  177. data/sig/revox/models/user_retrieve_response.rbs +71 -0
  178. data/sig/revox/models/voice_clone_params.rbs +79 -0
  179. data/sig/revox/models/voice_clone_response.rbs +40 -0
  180. data/sig/revox/models/voice_delete_params.rbs +20 -0
  181. data/sig/revox/models/voice_delete_response.rbs +13 -0
  182. data/sig/revox/models/voice_list_response.rbs +2 -1
  183. data/sig/revox/models/voice_preview_params.rbs +2 -1
  184. data/sig/revox/models/voice_retrieve_params.rbs +2 -1
  185. data/sig/revox/models.rbs +35 -1
  186. data/sig/revox/resources/assistants.rbs +9 -4
  187. data/sig/revox/resources/auth_status.rbs +11 -0
  188. data/sig/revox/resources/call.rbs +46 -1
  189. data/sig/revox/resources/campaigns.rbs +24 -3
  190. data/sig/revox/resources/phone_numbers.rbs +23 -0
  191. data/sig/revox/resources/users.rbs +3 -1
  192. data/sig/revox/resources/voices.rbs +13 -0
  193. metadata +116 -17
  194. data/lib/revox/models/users/me_retrieve_params.rb +0 -16
  195. data/lib/revox/models/users/me_retrieve_response.rb +0 -101
  196. data/lib/revox/models/users/me_update_params.rb +0 -22
  197. data/lib/revox/models/users/me_update_response.rb +0 -101
  198. data/lib/revox/resources/users/me.rb +0 -55
  199. data/rbi/revox/models/users/me_retrieve_params.rbi +0 -29
  200. data/rbi/revox/models/users/me_retrieve_response.rbi +0 -149
  201. data/rbi/revox/models/users/me_update_params.rbi +0 -43
  202. data/rbi/revox/models/users/me_update_response.rbi +0 -149
  203. data/rbi/revox/resources/users/me.rbi +0 -33
  204. data/sig/revox/models/users/me_retrieve_params.rbs +0 -16
  205. data/sig/revox/models/users/me_retrieve_response.rbs +0 -75
  206. data/sig/revox/models/users/me_update_params.rbs +0 -28
  207. data/sig/revox/models/users/me_update_response.rbs +0 -75
  208. data/sig/revox/resources/users/me.rbs +0 -18
@@ -93,25 +93,6 @@ module Revox
93
93
  sig { returns(T.nilable(String)) }
94
94
  attr_accessor :email_notification_address
95
95
 
96
- # The language used for the notification email content. One of "en" or "fr".
97
- # Defaults to "en".
98
- sig do
99
- returns(
100
- T.nilable(
101
- Revox::AssistantCreateParams::EmailNotificationLanguage::OrSymbol
102
- )
103
- )
104
- end
105
- attr_reader :email_notification_language
106
-
107
- sig do
108
- params(
109
- email_notification_language:
110
- Revox::AssistantCreateParams::EmailNotificationLanguage::OrSymbol
111
- ).void
112
- end
113
- attr_writer :email_notification_language
114
-
115
96
  # Which call outcomes trigger an email notification. E.g. ["interested",
116
97
  # "completed", "none"]. Use "none" when outcome is null.
117
98
  sig do
@@ -185,8 +166,8 @@ module Revox
185
166
  sig { returns(T.nilable(String)) }
186
167
  attr_accessor :from_phone_number
187
168
 
188
- # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
189
- # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
169
+ # When transfer_destinations is non-empty: "warm" (AI bridges) or "cold" (SIP
170
+ # REFER; trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
190
171
  sig do
191
172
  returns(
192
173
  T.nilable(Revox::AssistantCreateParams::HumanTransferMode::OrSymbol)
@@ -259,6 +240,14 @@ module Revox
259
240
  end
260
241
  attr_writer :position
261
242
 
243
+ # Inbound calls only. URL fetched over HTTP GET right before the call is answered,
244
+ # with `{{phone}}` replaced by the caller's number in E.164 format (URL-encoded).
245
+ # It must return `{"prompt_variables": {...}}` covering every `{{variable}}` the
246
+ # assistant declares, otherwise the call is errored. Must be an http(s) URL
247
+ # containing `{{phone}}`. When null, no lookup is performed.
248
+ sig { returns(T.nilable(String)) }
249
+ attr_accessor :precall_lookup_url
250
+
262
251
  # Visual prompt constructor data (nodes, edges, positions). Used by the UI to
263
252
  # re-open the visual editor. Does not affect call behavior — the flattened prompt
264
253
  # field is what the LLM receives.
@@ -376,10 +365,16 @@ module Revox
376
365
  sig { params(thinking_sound_volume: Float).void }
377
366
  attr_writer :thinking_sound_volume
378
367
 
379
- # Phone number to transfer calls to when users request to speak to a human agent
380
- # in E.164 format (e.g. +1234567890).
381
- sig { returns(T.nilable(String)) }
382
- attr_accessor :transfer_phone_number
368
+ # Where calls can be transferred to when users ask to speak to a human. With a
369
+ # single entry the assistant always transfers there; with several, it picks one at
370
+ # transfer time by applying the routing rules written in the assistant's own
371
+ # prompt (which refer to the destination labels). Empty or null disables transfer.
372
+ sig do
373
+ returns(
374
+ T.nilable(T::Array[Revox::AssistantCreateParams::TransferDestination])
375
+ )
376
+ end
377
+ attr_accessor :transfer_destinations
383
378
 
384
379
  # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
385
380
  # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
@@ -456,8 +451,6 @@ module Revox
456
451
  T::Array[Revox::AssistantCreateParams::CustomTool::OrHash]
457
452
  ),
458
453
  email_notification_address: T.nilable(String),
459
- email_notification_language:
460
- Revox::AssistantCreateParams::EmailNotificationLanguage::OrSymbol,
461
454
  email_notification_outcomes:
462
455
  T.nilable(
463
456
  T::Array[
@@ -487,6 +480,7 @@ module Revox
487
480
  max_call_duration_secs: Float,
488
481
  max_duration_end_message: T.nilable(String),
489
482
  position: T.nilable(Revox::AssistantCreateParams::Position::OrHash),
483
+ precall_lookup_url: T.nilable(String),
490
484
  prompt_flow:
491
485
  T.nilable(Revox::AssistantCreateParams::PromptFlow::OrHash),
492
486
  slack: T.nilable(Revox::AssistantCreateParams::Slack::OrHash),
@@ -504,7 +498,12 @@ module Revox
504
498
  T.nilable(Revox::AssistantCreateParams::ThinkingSound::OrSymbol),
505
499
  thinking_sound_probability: Float,
506
500
  thinking_sound_volume: Float,
507
- transfer_phone_number: T.nilable(String),
501
+ transfer_destinations:
502
+ T.nilable(
503
+ T::Array[
504
+ Revox::AssistantCreateParams::TransferDestination::OrHash
505
+ ]
506
+ ),
508
507
  type: Revox::AssistantCreateParams::Type::OrSymbol,
509
508
  voice: Revox::AssistantCreateParams::Voice::OrHash,
510
509
  voicemail_message: T.nilable(String),
@@ -544,9 +543,6 @@ module Revox
544
543
  # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
545
544
  # bob@y.com").
546
545
  email_notification_address: nil,
547
- # The language used for the notification email content. One of "en" or "fr".
548
- # Defaults to "en".
549
- email_notification_language: nil,
550
546
  # Which call outcomes trigger an email notification. E.g. ["interested",
551
547
  # "completed", "none"]. Use "none" when outcome is null.
552
548
  email_notification_outcomes: nil,
@@ -568,8 +564,8 @@ module Revox
568
564
  # Must be a phone number owned by the organization in E.164 format (e.g.
569
565
  # +1234567890). When null, the organization's default phone number is used.
570
566
  from_phone_number: nil,
571
- # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
572
- # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
567
+ # When transfer_destinations is non-empty: "warm" (AI bridges) or "cold" (SIP
568
+ # REFER; trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
573
569
  human_transfer_mode: nil,
574
570
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
575
571
  # skip turns to navigate phone menus.
@@ -587,6 +583,12 @@ module Revox
587
583
  max_duration_end_message: nil,
588
584
  # Canvas position of this assistant's node in its multi-step flow editor.
589
585
  position: nil,
586
+ # Inbound calls only. URL fetched over HTTP GET right before the call is answered,
587
+ # with `{{phone}}` replaced by the caller's number in E.164 format (URL-encoded).
588
+ # It must return `{"prompt_variables": {...}}` covering every `{{variable}}` the
589
+ # assistant declares, otherwise the call is errored. Must be an http(s) URL
590
+ # containing `{{phone}}`. When null, no lookup is performed.
591
+ precall_lookup_url: nil,
590
592
  # Visual prompt constructor data (nodes, edges, positions). Used by the UI to
591
593
  # re-open the visual editor. Does not affect call behavior — the flattened prompt
592
594
  # field is what the LLM receives.
@@ -623,9 +625,11 @@ module Revox
623
625
  thinking_sound_probability: nil,
624
626
  # Volume of the thinking sound (0 = silent, 1 = max).
625
627
  thinking_sound_volume: nil,
626
- # Phone number to transfer calls to when users request to speak to a human agent
627
- # in E.164 format (e.g. +1234567890).
628
- transfer_phone_number: nil,
628
+ # Where calls can be transferred to when users ask to speak to a human. With a
629
+ # single entry the assistant always transfers there; with several, it picks one at
630
+ # transfer time by applying the routing rules written in the assistant's own
631
+ # prompt (which refer to the destination labels). Empty or null disables transfer.
632
+ transfer_destinations: nil,
629
633
  # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
630
634
  # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
631
635
  # multi-step flow (hidden from the assistants list). Flow transitions are managed
@@ -677,8 +681,6 @@ module Revox
677
681
  custom_tools:
678
682
  T.nilable(T::Array[Revox::AssistantCreateParams::CustomTool]),
679
683
  email_notification_address: T.nilable(String),
680
- email_notification_language:
681
- Revox::AssistantCreateParams::EmailNotificationLanguage::OrSymbol,
682
684
  email_notification_outcomes:
683
685
  T.nilable(
684
686
  T::Array[
@@ -708,6 +710,7 @@ module Revox
708
710
  max_call_duration_secs: Float,
709
711
  max_duration_end_message: T.nilable(String),
710
712
  position: T.nilable(Revox::AssistantCreateParams::Position),
713
+ precall_lookup_url: T.nilable(String),
711
714
  prompt_flow: T.nilable(Revox::AssistantCreateParams::PromptFlow),
712
715
  slack: T.nilable(Revox::AssistantCreateParams::Slack),
713
716
  sms_enabled: T::Boolean,
@@ -721,7 +724,10 @@ module Revox
721
724
  T.nilable(Revox::AssistantCreateParams::ThinkingSound::OrSymbol),
722
725
  thinking_sound_probability: Float,
723
726
  thinking_sound_volume: Float,
724
- transfer_phone_number: T.nilable(String),
727
+ transfer_destinations:
728
+ T.nilable(
729
+ T::Array[Revox::AssistantCreateParams::TransferDestination]
730
+ ),
725
731
  type: Revox::AssistantCreateParams::Type::OrSymbol,
726
732
  voice: Revox::AssistantCreateParams::Voice,
727
733
  voicemail_message: T.nilable(String),
@@ -765,21 +771,6 @@ module Revox
765
771
  :requested_callback_later,
766
772
  Revox::AssistantCreateParams::AfterCallSMSOutcome::TaggedSymbol
767
773
  )
768
- REQUESTED_CALLBACK_NEW_NUMBER =
769
- T.let(
770
- :requested_callback_new_number,
771
- Revox::AssistantCreateParams::AfterCallSMSOutcome::TaggedSymbol
772
- )
773
- DO_NOT_CONTACT =
774
- T.let(
775
- :do_not_contact,
776
- Revox::AssistantCreateParams::AfterCallSMSOutcome::TaggedSymbol
777
- )
778
- AI_AVERSE =
779
- T.let(
780
- :ai_averse,
781
- Revox::AssistantCreateParams::AfterCallSMSOutcome::TaggedSymbol
782
- )
783
774
  NONE =
784
775
  T.let(
785
776
  :none,
@@ -1045,7 +1036,8 @@ module Revox
1045
1036
  sig { returns(String) }
1046
1037
  attr_accessor :calling_window_start_time
1047
1038
 
1048
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1039
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1040
+ # allows. Default: 7200 (2 hours).
1049
1041
  sig { returns(Integer) }
1050
1042
  attr_accessor :retry_delay_seconds
1051
1043
 
@@ -1065,7 +1057,8 @@ module Revox
1065
1057
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1066
1058
  # Examples: '09:00', '10am'. Default: '10:00'.
1067
1059
  calling_window_start_time:,
1068
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1060
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1061
+ # allows. Default: 7200 (2 hours).
1069
1062
  retry_delay_seconds:
1070
1063
  )
1071
1064
  end
@@ -1428,42 +1421,6 @@ module Revox
1428
1421
  end
1429
1422
  end
1430
1423
 
1431
- # The language used for the notification email content. One of "en" or "fr".
1432
- # Defaults to "en".
1433
- module EmailNotificationLanguage
1434
- extend Revox::Internal::Type::Enum
1435
-
1436
- TaggedSymbol =
1437
- T.type_alias do
1438
- T.all(
1439
- Symbol,
1440
- Revox::AssistantCreateParams::EmailNotificationLanguage
1441
- )
1442
- end
1443
- OrSymbol = T.type_alias { T.any(Symbol, String) }
1444
-
1445
- EN =
1446
- T.let(
1447
- :en,
1448
- Revox::AssistantCreateParams::EmailNotificationLanguage::TaggedSymbol
1449
- )
1450
- FR =
1451
- T.let(
1452
- :fr,
1453
- Revox::AssistantCreateParams::EmailNotificationLanguage::TaggedSymbol
1454
- )
1455
-
1456
- sig do
1457
- override.returns(
1458
- T::Array[
1459
- Revox::AssistantCreateParams::EmailNotificationLanguage::TaggedSymbol
1460
- ]
1461
- )
1462
- end
1463
- def self.values
1464
- end
1465
- end
1466
-
1467
1424
  module EmailNotificationOutcome
1468
1425
  extend Revox::Internal::Type::Enum
1469
1426
 
@@ -1496,21 +1453,6 @@ module Revox
1496
1453
  :requested_callback_later,
1497
1454
  Revox::AssistantCreateParams::EmailNotificationOutcome::TaggedSymbol
1498
1455
  )
1499
- REQUESTED_CALLBACK_NEW_NUMBER =
1500
- T.let(
1501
- :requested_callback_new_number,
1502
- Revox::AssistantCreateParams::EmailNotificationOutcome::TaggedSymbol
1503
- )
1504
- DO_NOT_CONTACT =
1505
- T.let(
1506
- :do_not_contact,
1507
- Revox::AssistantCreateParams::EmailNotificationOutcome::TaggedSymbol
1508
- )
1509
- AI_AVERSE =
1510
- T.let(
1511
- :ai_averse,
1512
- Revox::AssistantCreateParams::EmailNotificationOutcome::TaggedSymbol
1513
- )
1514
1456
  NONE =
1515
1457
  T.let(
1516
1458
  :none,
@@ -1594,8 +1536,8 @@ module Revox
1594
1536
  end
1595
1537
  end
1596
1538
 
1597
- # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
1598
- # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
1539
+ # When transfer_destinations is non-empty: "warm" (AI bridges) or "cold" (SIP
1540
+ # REFER; trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
1599
1541
  module HumanTransferMode
1600
1542
  extend Revox::Internal::Type::Enum
1601
1543
 
@@ -2163,9 +2105,11 @@ module Revox
2163
2105
  T.any(Revox::AssistantCreateParams::Slack, Revox::Internal::AnyHash)
2164
2106
  end
2165
2107
 
2166
- # The Slack channel ID where the notification will be posted.
2167
- sig { returns(String) }
2168
- attr_accessor :channel_id
2108
+ # The Slack channels eligible to receive the notification. When more than one is
2109
+ # configured, the agent prompt may define routing rules to narrow it down per
2110
+ # call; with no such rules every channel here is notified.
2111
+ sig { returns(T::Array[Revox::AssistantCreateParams::Slack::Channel]) }
2112
+ attr_accessor :channels
2169
2113
 
2170
2114
  # The Nango connection ID linking the org's Slack workspace to Revox.
2171
2115
  sig { returns(String) }
@@ -2180,15 +2124,11 @@ module Revox
2180
2124
  end
2181
2125
  attr_accessor :outcomes
2182
2126
 
2183
- # Human-readable Slack channel name, cached for display in the UI.
2184
- sig { returns(T.nilable(String)) }
2185
- attr_accessor :channel_name
2186
-
2187
2127
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2188
2128
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2189
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2190
- # prompt_variables and structured_output keys. When null/empty a default template
2191
- # is used.
2129
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2130
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2131
+ # null/empty a default template is used.
2192
2132
  sig { returns(T.nilable(String)) }
2193
2133
  attr_accessor :template
2194
2134
 
@@ -2196,29 +2136,29 @@ module Revox
2196
2136
  # a call ends with one of the configured outcomes.
2197
2137
  sig do
2198
2138
  params(
2199
- channel_id: String,
2139
+ channels:
2140
+ T::Array[Revox::AssistantCreateParams::Slack::Channel::OrHash],
2200
2141
  connection_id: String,
2201
2142
  outcomes:
2202
2143
  T::Array[Revox::AssistantCreateParams::Slack::Outcome::OrSymbol],
2203
- channel_name: T.nilable(String),
2204
2144
  template: T.nilable(String)
2205
2145
  ).returns(T.attached_class)
2206
2146
  end
2207
2147
  def self.new(
2208
- # The Slack channel ID where the notification will be posted.
2209
- channel_id:,
2148
+ # The Slack channels eligible to receive the notification. When more than one is
2149
+ # configured, the agent prompt may define routing rules to narrow it down per
2150
+ # call; with no such rules every channel here is notified.
2151
+ channels:,
2210
2152
  # The Nango connection ID linking the org's Slack workspace to Revox.
2211
2153
  connection_id:,
2212
2154
  # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2213
2155
  # Use 'none' to notify when outcome is null.
2214
2156
  outcomes:,
2215
- # Human-readable Slack channel name, cached for display in the UI.
2216
- channel_name: nil,
2217
2157
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2218
2158
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2219
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2220
- # prompt_variables and structured_output keys. When null/empty a default template
2221
- # is used.
2159
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2160
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2161
+ # null/empty a default template is used.
2222
2162
  template: nil
2223
2163
  )
2224
2164
  end
@@ -2226,13 +2166,12 @@ module Revox
2226
2166
  sig do
2227
2167
  override.returns(
2228
2168
  {
2229
- channel_id: String,
2169
+ channels: T::Array[Revox::AssistantCreateParams::Slack::Channel],
2230
2170
  connection_id: String,
2231
2171
  outcomes:
2232
2172
  T::Array[
2233
2173
  Revox::AssistantCreateParams::Slack::Outcome::OrSymbol
2234
2174
  ],
2235
- channel_name: T.nilable(String),
2236
2175
  template: T.nilable(String)
2237
2176
  }
2238
2177
  )
@@ -2240,6 +2179,43 @@ module Revox
2240
2179
  def to_hash
2241
2180
  end
2242
2181
 
2182
+ class Channel < Revox::Internal::Type::BaseModel
2183
+ OrHash =
2184
+ T.type_alias do
2185
+ T.any(
2186
+ Revox::AssistantCreateParams::Slack::Channel,
2187
+ Revox::Internal::AnyHash
2188
+ )
2189
+ end
2190
+
2191
+ # The Slack channel ID (e.g. 'C01234567').
2192
+ sig { returns(String) }
2193
+ attr_accessor :id
2194
+
2195
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2196
+ # LLM when the agent prompt routes by channel name.
2197
+ sig { returns(T.nilable(String)) }
2198
+ attr_accessor :name
2199
+
2200
+ sig do
2201
+ params(id: String, name: T.nilable(String)).returns(
2202
+ T.attached_class
2203
+ )
2204
+ end
2205
+ def self.new(
2206
+ # The Slack channel ID (e.g. 'C01234567').
2207
+ id:,
2208
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2209
+ # LLM when the agent prompt routes by channel name.
2210
+ name: nil
2211
+ )
2212
+ end
2213
+
2214
+ sig { override.returns({ id: String, name: T.nilable(String) }) }
2215
+ def to_hash
2216
+ end
2217
+ end
2218
+
2243
2219
  module Outcome
2244
2220
  extend Revox::Internal::Type::Enum
2245
2221
 
@@ -2269,21 +2245,6 @@ module Revox
2269
2245
  :requested_callback_later,
2270
2246
  Revox::AssistantCreateParams::Slack::Outcome::TaggedSymbol
2271
2247
  )
2272
- REQUESTED_CALLBACK_NEW_NUMBER =
2273
- T.let(
2274
- :requested_callback_new_number,
2275
- Revox::AssistantCreateParams::Slack::Outcome::TaggedSymbol
2276
- )
2277
- DO_NOT_CONTACT =
2278
- T.let(
2279
- :do_not_contact,
2280
- Revox::AssistantCreateParams::Slack::Outcome::TaggedSymbol
2281
- )
2282
- AI_AVERSE =
2283
- T.let(
2284
- :ai_averse,
2285
- Revox::AssistantCreateParams::Slack::Outcome::TaggedSymbol
2286
- )
2287
2248
  NONE =
2288
2249
  T.let(
2289
2250
  :none,
@@ -2579,6 +2540,41 @@ module Revox
2579
2540
  end
2580
2541
  end
2581
2542
 
2543
+ class TransferDestination < Revox::Internal::Type::BaseModel
2544
+ OrHash =
2545
+ T.type_alias do
2546
+ T.any(
2547
+ Revox::AssistantCreateParams::TransferDestination,
2548
+ Revox::Internal::AnyHash
2549
+ )
2550
+ end
2551
+
2552
+ # Human-meaningful name for this destination (e.g. "Sales"). The assistant's
2553
+ # prompt refers to these labels when describing who to transfer to.
2554
+ sig { returns(String) }
2555
+ attr_accessor :label
2556
+
2557
+ # Destination phone number in E.164 format (e.g. +1234567890).
2558
+ sig { returns(String) }
2559
+ attr_accessor :phone_number
2560
+
2561
+ sig do
2562
+ params(label: String, phone_number: String).returns(T.attached_class)
2563
+ end
2564
+ def self.new(
2565
+ # Human-meaningful name for this destination (e.g. "Sales"). The assistant's
2566
+ # prompt refers to these labels when describing who to transfer to.
2567
+ label:,
2568
+ # Destination phone number in E.164 format (e.g. +1234567890).
2569
+ phone_number:
2570
+ )
2571
+ end
2572
+
2573
+ sig { override.returns({ label: String, phone_number: String }) }
2574
+ def to_hash
2575
+ end
2576
+ end
2577
+
2582
2578
  # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
2583
2579
  # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
2584
2580
  # multi-step flow (hidden from the assistants list). Flow transitions are managed
@@ -2640,7 +2636,7 @@ module Revox
2640
2636
  attr_writer :model
2641
2637
 
2642
2638
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
2643
- # 0.7–1.2. Default is 1.0.
2639
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
2644
2640
  sig { returns(T.nilable(Float)) }
2645
2641
  attr_reader :speed
2646
2642
 
@@ -2675,7 +2671,7 @@ module Revox
2675
2671
  # for other providers.
2676
2672
  model: nil,
2677
2673
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
2678
- # 0.7–1.2. Default is 1.0.
2674
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
2679
2675
  speed: nil,
2680
2676
  # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
2681
2677
  # providers.
@@ -2717,6 +2713,11 @@ module Revox
2717
2713
  :elevenlabs,
2718
2714
  Revox::AssistantCreateParams::Voice::Provider::TaggedSymbol
2719
2715
  )
2716
+ GRADIUM =
2717
+ T.let(
2718
+ :gradium,
2719
+ Revox::AssistantCreateParams::Voice::Provider::TaggedSymbol
2720
+ )
2720
2721
 
2721
2722
  sig do
2722
2723
  override.returns(
@@ -2925,21 +2926,6 @@ module Revox
2925
2926
  :requested_callback_later,
2926
2927
  Revox::AssistantCreateParams::Zoho::Outcome::TaggedSymbol
2927
2928
  )
2928
- REQUESTED_CALLBACK_NEW_NUMBER =
2929
- T.let(
2930
- :requested_callback_new_number,
2931
- Revox::AssistantCreateParams::Zoho::Outcome::TaggedSymbol
2932
- )
2933
- DO_NOT_CONTACT =
2934
- T.let(
2935
- :do_not_contact,
2936
- Revox::AssistantCreateParams::Zoho::Outcome::TaggedSymbol
2937
- )
2938
- AI_AVERSE =
2939
- T.let(
2940
- :ai_averse,
2941
- Revox::AssistantCreateParams::Zoho::Outcome::TaggedSymbol
2942
- )
2943
2929
  NONE =
2944
2930
  T.let(
2945
2931
  :none,