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
@@ -89,25 +89,6 @@ module Revox
89
89
  sig { returns(T.nilable(String)) }
90
90
  attr_accessor :email_notification_address
91
91
 
92
- # The language used for the notification email content. One of "en" or "fr".
93
- # Defaults to "en".
94
- sig do
95
- returns(
96
- T.nilable(
97
- Revox::AssistantUpdateParams::EmailNotificationLanguage::OrSymbol
98
- )
99
- )
100
- end
101
- attr_reader :email_notification_language
102
-
103
- sig do
104
- params(
105
- email_notification_language:
106
- Revox::AssistantUpdateParams::EmailNotificationLanguage::OrSymbol
107
- ).void
108
- end
109
- attr_writer :email_notification_language
110
-
111
92
  # Which call outcomes trigger an email notification. E.g. ["interested",
112
93
  # "completed", "none"]. Use "none" when outcome is null.
113
94
  sig do
@@ -181,8 +162,8 @@ module Revox
181
162
  sig { returns(T.nilable(String)) }
182
163
  attr_accessor :from_phone_number
183
164
 
184
- # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
185
- # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
165
+ # When transfer_destinations is non-empty: "warm" (AI bridges) or "cold" (SIP
166
+ # REFER; trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
186
167
  sig do
187
168
  returns(
188
169
  T.nilable(Revox::AssistantUpdateParams::HumanTransferMode::OrSymbol)
@@ -261,6 +242,14 @@ module Revox
261
242
  end
262
243
  attr_writer :position
263
244
 
245
+ # Inbound calls only. URL fetched over HTTP GET right before the call is answered,
246
+ # with `{{phone}}` replaced by the caller's number in E.164 format (URL-encoded).
247
+ # It must return `{"prompt_variables": {...}}` covering every `{{variable}}` the
248
+ # assistant declares, otherwise the call is errored. Must be an http(s) URL
249
+ # containing `{{phone}}`. When null, no lookup is performed.
250
+ sig { returns(T.nilable(String)) }
251
+ attr_accessor :precall_lookup_url
252
+
264
253
  # The prompt to use for the call. This will be given to the LLM (gpt-4.1)
265
254
  sig { returns(T.nilable(String)) }
266
255
  attr_reader :prompt
@@ -385,10 +374,16 @@ module Revox
385
374
  sig { params(thinking_sound_volume: Float).void }
386
375
  attr_writer :thinking_sound_volume
387
376
 
388
- # Phone number to transfer calls to when users request to speak to a human agent
389
- # in E.164 format (e.g. +1234567890).
390
- sig { returns(T.nilable(String)) }
391
- attr_accessor :transfer_phone_number
377
+ # Where calls can be transferred to when users ask to speak to a human. With a
378
+ # single entry the assistant always transfers there; with several, it picks one at
379
+ # transfer time by applying the routing rules written in the assistant's own
380
+ # prompt (which refer to the destination labels). Empty or null disables transfer.
381
+ sig do
382
+ returns(
383
+ T.nilable(T::Array[Revox::AssistantUpdateParams::TransferDestination])
384
+ )
385
+ end
386
+ attr_accessor :transfer_destinations
392
387
 
393
388
  # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
394
389
  # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
@@ -464,8 +459,6 @@ module Revox
464
459
  T::Array[Revox::AssistantUpdateParams::CustomTool::OrHash]
465
460
  ),
466
461
  email_notification_address: T.nilable(String),
467
- email_notification_language:
468
- Revox::AssistantUpdateParams::EmailNotificationLanguage::OrSymbol,
469
462
  email_notification_outcomes:
470
463
  T.nilable(
471
464
  T::Array[
@@ -496,6 +489,7 @@ module Revox
496
489
  max_duration_end_message: T.nilable(String),
497
490
  name: String,
498
491
  position: T.nilable(Revox::AssistantUpdateParams::Position::OrHash),
492
+ precall_lookup_url: T.nilable(String),
499
493
  prompt: String,
500
494
  prompt_flow:
501
495
  T.nilable(Revox::AssistantUpdateParams::PromptFlow::OrHash),
@@ -514,7 +508,12 @@ module Revox
514
508
  T.nilable(Revox::AssistantUpdateParams::ThinkingSound::OrSymbol),
515
509
  thinking_sound_probability: Float,
516
510
  thinking_sound_volume: Float,
517
- transfer_phone_number: T.nilable(String),
511
+ transfer_destinations:
512
+ T.nilable(
513
+ T::Array[
514
+ Revox::AssistantUpdateParams::TransferDestination::OrHash
515
+ ]
516
+ ),
518
517
  type: Revox::AssistantUpdateParams::Type::OrSymbol,
519
518
  voice: Revox::AssistantUpdateParams::Voice::OrHash,
520
519
  voicemail_message: T.nilable(String),
@@ -552,9 +551,6 @@ module Revox
552
551
  # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
553
552
  # bob@y.com").
554
553
  email_notification_address: nil,
555
- # The language used for the notification email content. One of "en" or "fr".
556
- # Defaults to "en".
557
- email_notification_language: nil,
558
554
  # Which call outcomes trigger an email notification. E.g. ["interested",
559
555
  # "completed", "none"]. Use "none" when outcome is null.
560
556
  email_notification_outcomes: nil,
@@ -576,8 +572,8 @@ module Revox
576
572
  # Must be a phone number owned by the organization in E.164 format (e.g.
577
573
  # +1234567890). When null, the organization's default phone number is used.
578
574
  from_phone_number: nil,
579
- # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
580
- # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
575
+ # When transfer_destinations is non-empty: "warm" (AI bridges) or "cold" (SIP
576
+ # REFER; trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
581
577
  human_transfer_mode: nil,
582
578
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
583
579
  # skip turns to navigate phone menus.
@@ -596,6 +592,12 @@ module Revox
596
592
  name: nil,
597
593
  # Canvas position of this assistant's node in its multi-step flow editor.
598
594
  position: nil,
595
+ # Inbound calls only. URL fetched over HTTP GET right before the call is answered,
596
+ # with `{{phone}}` replaced by the caller's number in E.164 format (URL-encoded).
597
+ # It must return `{"prompt_variables": {...}}` covering every `{{variable}}` the
598
+ # assistant declares, otherwise the call is errored. Must be an http(s) URL
599
+ # containing `{{phone}}`. When null, no lookup is performed.
600
+ precall_lookup_url: nil,
599
601
  # The prompt to use for the call. This will be given to the LLM (gpt-4.1)
600
602
  prompt: nil,
601
603
  # Visual prompt constructor data (nodes, edges, positions). Used by the UI to
@@ -634,9 +636,11 @@ module Revox
634
636
  thinking_sound_probability: nil,
635
637
  # Volume of the thinking sound (0 = silent, 1 = max).
636
638
  thinking_sound_volume: nil,
637
- # Phone number to transfer calls to when users request to speak to a human agent
638
- # in E.164 format (e.g. +1234567890).
639
- transfer_phone_number: nil,
639
+ # Where calls can be transferred to when users ask to speak to a human. With a
640
+ # single entry the assistant always transfers there; with several, it picks one at
641
+ # transfer time by applying the routing rules written in the assistant's own
642
+ # prompt (which refer to the destination labels). Empty or null disables transfer.
643
+ transfer_destinations: nil,
640
644
  # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
641
645
  # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
642
646
  # multi-step flow (hidden from the assistants list). Flow transitions are managed
@@ -687,8 +691,6 @@ module Revox
687
691
  custom_tools:
688
692
  T.nilable(T::Array[Revox::AssistantUpdateParams::CustomTool]),
689
693
  email_notification_address: T.nilable(String),
690
- email_notification_language:
691
- Revox::AssistantUpdateParams::EmailNotificationLanguage::OrSymbol,
692
694
  email_notification_outcomes:
693
695
  T.nilable(
694
696
  T::Array[
@@ -719,6 +721,7 @@ module Revox
719
721
  max_duration_end_message: T.nilable(String),
720
722
  name: String,
721
723
  position: T.nilable(Revox::AssistantUpdateParams::Position),
724
+ precall_lookup_url: T.nilable(String),
722
725
  prompt: String,
723
726
  prompt_flow: T.nilable(Revox::AssistantUpdateParams::PromptFlow),
724
727
  slack: T.nilable(Revox::AssistantUpdateParams::Slack),
@@ -733,7 +736,10 @@ module Revox
733
736
  T.nilable(Revox::AssistantUpdateParams::ThinkingSound::OrSymbol),
734
737
  thinking_sound_probability: Float,
735
738
  thinking_sound_volume: Float,
736
- transfer_phone_number: T.nilable(String),
739
+ transfer_destinations:
740
+ T.nilable(
741
+ T::Array[Revox::AssistantUpdateParams::TransferDestination]
742
+ ),
737
743
  type: Revox::AssistantUpdateParams::Type::OrSymbol,
738
744
  voice: Revox::AssistantUpdateParams::Voice,
739
745
  voicemail_message: T.nilable(String),
@@ -777,21 +783,6 @@ module Revox
777
783
  :requested_callback_later,
778
784
  Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
779
785
  )
780
- REQUESTED_CALLBACK_NEW_NUMBER =
781
- T.let(
782
- :requested_callback_new_number,
783
- Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
784
- )
785
- DO_NOT_CONTACT =
786
- T.let(
787
- :do_not_contact,
788
- Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
789
- )
790
- AI_AVERSE =
791
- T.let(
792
- :ai_averse,
793
- Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
794
- )
795
786
  NONE =
796
787
  T.let(
797
788
  :none,
@@ -1057,7 +1048,8 @@ module Revox
1057
1048
  sig { returns(String) }
1058
1049
  attr_accessor :calling_window_start_time
1059
1050
 
1060
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1051
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1052
+ # allows. Default: 7200 (2 hours).
1061
1053
  sig { returns(Integer) }
1062
1054
  attr_accessor :retry_delay_seconds
1063
1055
 
@@ -1077,7 +1069,8 @@ module Revox
1077
1069
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1078
1070
  # Examples: '09:00', '10am'. Default: '10:00'.
1079
1071
  calling_window_start_time:,
1080
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1072
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1073
+ # allows. Default: 7200 (2 hours).
1081
1074
  retry_delay_seconds:
1082
1075
  )
1083
1076
  end
@@ -1440,42 +1433,6 @@ module Revox
1440
1433
  end
1441
1434
  end
1442
1435
 
1443
- # The language used for the notification email content. One of "en" or "fr".
1444
- # Defaults to "en".
1445
- module EmailNotificationLanguage
1446
- extend Revox::Internal::Type::Enum
1447
-
1448
- TaggedSymbol =
1449
- T.type_alias do
1450
- T.all(
1451
- Symbol,
1452
- Revox::AssistantUpdateParams::EmailNotificationLanguage
1453
- )
1454
- end
1455
- OrSymbol = T.type_alias { T.any(Symbol, String) }
1456
-
1457
- EN =
1458
- T.let(
1459
- :en,
1460
- Revox::AssistantUpdateParams::EmailNotificationLanguage::TaggedSymbol
1461
- )
1462
- FR =
1463
- T.let(
1464
- :fr,
1465
- Revox::AssistantUpdateParams::EmailNotificationLanguage::TaggedSymbol
1466
- )
1467
-
1468
- sig do
1469
- override.returns(
1470
- T::Array[
1471
- Revox::AssistantUpdateParams::EmailNotificationLanguage::TaggedSymbol
1472
- ]
1473
- )
1474
- end
1475
- def self.values
1476
- end
1477
- end
1478
-
1479
1436
  module EmailNotificationOutcome
1480
1437
  extend Revox::Internal::Type::Enum
1481
1438
 
@@ -1508,21 +1465,6 @@ module Revox
1508
1465
  :requested_callback_later,
1509
1466
  Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
1510
1467
  )
1511
- REQUESTED_CALLBACK_NEW_NUMBER =
1512
- T.let(
1513
- :requested_callback_new_number,
1514
- Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
1515
- )
1516
- DO_NOT_CONTACT =
1517
- T.let(
1518
- :do_not_contact,
1519
- Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
1520
- )
1521
- AI_AVERSE =
1522
- T.let(
1523
- :ai_averse,
1524
- Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
1525
- )
1526
1468
  NONE =
1527
1469
  T.let(
1528
1470
  :none,
@@ -1606,8 +1548,8 @@ module Revox
1606
1548
  end
1607
1549
  end
1608
1550
 
1609
- # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
1610
- # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
1551
+ # When transfer_destinations is non-empty: "warm" (AI bridges) or "cold" (SIP
1552
+ # REFER; trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
1611
1553
  module HumanTransferMode
1612
1554
  extend Revox::Internal::Type::Enum
1613
1555
 
@@ -2175,9 +2117,11 @@ module Revox
2175
2117
  T.any(Revox::AssistantUpdateParams::Slack, Revox::Internal::AnyHash)
2176
2118
  end
2177
2119
 
2178
- # The Slack channel ID where the notification will be posted.
2179
- sig { returns(String) }
2180
- attr_accessor :channel_id
2120
+ # The Slack channels eligible to receive the notification. When more than one is
2121
+ # configured, the agent prompt may define routing rules to narrow it down per
2122
+ # call; with no such rules every channel here is notified.
2123
+ sig { returns(T::Array[Revox::AssistantUpdateParams::Slack::Channel]) }
2124
+ attr_accessor :channels
2181
2125
 
2182
2126
  # The Nango connection ID linking the org's Slack workspace to Revox.
2183
2127
  sig { returns(String) }
@@ -2192,15 +2136,11 @@ module Revox
2192
2136
  end
2193
2137
  attr_accessor :outcomes
2194
2138
 
2195
- # Human-readable Slack channel name, cached for display in the UI.
2196
- sig { returns(T.nilable(String)) }
2197
- attr_accessor :channel_name
2198
-
2199
2139
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2200
2140
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2201
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2202
- # prompt_variables and structured_output keys. When null/empty a default template
2203
- # is used.
2141
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2142
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2143
+ # null/empty a default template is used.
2204
2144
  sig { returns(T.nilable(String)) }
2205
2145
  attr_accessor :template
2206
2146
 
@@ -2208,29 +2148,29 @@ module Revox
2208
2148
  # a call ends with one of the configured outcomes.
2209
2149
  sig do
2210
2150
  params(
2211
- channel_id: String,
2151
+ channels:
2152
+ T::Array[Revox::AssistantUpdateParams::Slack::Channel::OrHash],
2212
2153
  connection_id: String,
2213
2154
  outcomes:
2214
2155
  T::Array[Revox::AssistantUpdateParams::Slack::Outcome::OrSymbol],
2215
- channel_name: T.nilable(String),
2216
2156
  template: T.nilable(String)
2217
2157
  ).returns(T.attached_class)
2218
2158
  end
2219
2159
  def self.new(
2220
- # The Slack channel ID where the notification will be posted.
2221
- channel_id:,
2160
+ # The Slack channels eligible to receive the notification. When more than one is
2161
+ # configured, the agent prompt may define routing rules to narrow it down per
2162
+ # call; with no such rules every channel here is notified.
2163
+ channels:,
2222
2164
  # The Nango connection ID linking the org's Slack workspace to Revox.
2223
2165
  connection_id:,
2224
2166
  # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2225
2167
  # Use 'none' to notify when outcome is null.
2226
2168
  outcomes:,
2227
- # Human-readable Slack channel name, cached for display in the UI.
2228
- channel_name: nil,
2229
2169
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2230
2170
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2231
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2232
- # prompt_variables and structured_output keys. When null/empty a default template
2233
- # is used.
2171
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2172
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2173
+ # null/empty a default template is used.
2234
2174
  template: nil
2235
2175
  )
2236
2176
  end
@@ -2238,13 +2178,12 @@ module Revox
2238
2178
  sig do
2239
2179
  override.returns(
2240
2180
  {
2241
- channel_id: String,
2181
+ channels: T::Array[Revox::AssistantUpdateParams::Slack::Channel],
2242
2182
  connection_id: String,
2243
2183
  outcomes:
2244
2184
  T::Array[
2245
2185
  Revox::AssistantUpdateParams::Slack::Outcome::OrSymbol
2246
2186
  ],
2247
- channel_name: T.nilable(String),
2248
2187
  template: T.nilable(String)
2249
2188
  }
2250
2189
  )
@@ -2252,6 +2191,43 @@ module Revox
2252
2191
  def to_hash
2253
2192
  end
2254
2193
 
2194
+ class Channel < Revox::Internal::Type::BaseModel
2195
+ OrHash =
2196
+ T.type_alias do
2197
+ T.any(
2198
+ Revox::AssistantUpdateParams::Slack::Channel,
2199
+ Revox::Internal::AnyHash
2200
+ )
2201
+ end
2202
+
2203
+ # The Slack channel ID (e.g. 'C01234567').
2204
+ sig { returns(String) }
2205
+ attr_accessor :id
2206
+
2207
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2208
+ # LLM when the agent prompt routes by channel name.
2209
+ sig { returns(T.nilable(String)) }
2210
+ attr_accessor :name
2211
+
2212
+ sig do
2213
+ params(id: String, name: T.nilable(String)).returns(
2214
+ T.attached_class
2215
+ )
2216
+ end
2217
+ def self.new(
2218
+ # The Slack channel ID (e.g. 'C01234567').
2219
+ id:,
2220
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2221
+ # LLM when the agent prompt routes by channel name.
2222
+ name: nil
2223
+ )
2224
+ end
2225
+
2226
+ sig { override.returns({ id: String, name: T.nilable(String) }) }
2227
+ def to_hash
2228
+ end
2229
+ end
2230
+
2255
2231
  module Outcome
2256
2232
  extend Revox::Internal::Type::Enum
2257
2233
 
@@ -2281,21 +2257,6 @@ module Revox
2281
2257
  :requested_callback_later,
2282
2258
  Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
2283
2259
  )
2284
- REQUESTED_CALLBACK_NEW_NUMBER =
2285
- T.let(
2286
- :requested_callback_new_number,
2287
- Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
2288
- )
2289
- DO_NOT_CONTACT =
2290
- T.let(
2291
- :do_not_contact,
2292
- Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
2293
- )
2294
- AI_AVERSE =
2295
- T.let(
2296
- :ai_averse,
2297
- Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
2298
- )
2299
2260
  NONE =
2300
2261
  T.let(
2301
2262
  :none,
@@ -2591,6 +2552,41 @@ module Revox
2591
2552
  end
2592
2553
  end
2593
2554
 
2555
+ class TransferDestination < Revox::Internal::Type::BaseModel
2556
+ OrHash =
2557
+ T.type_alias do
2558
+ T.any(
2559
+ Revox::AssistantUpdateParams::TransferDestination,
2560
+ Revox::Internal::AnyHash
2561
+ )
2562
+ end
2563
+
2564
+ # Human-meaningful name for this destination (e.g. "Sales"). The assistant's
2565
+ # prompt refers to these labels when describing who to transfer to.
2566
+ sig { returns(String) }
2567
+ attr_accessor :label
2568
+
2569
+ # Destination phone number in E.164 format (e.g. +1234567890).
2570
+ sig { returns(String) }
2571
+ attr_accessor :phone_number
2572
+
2573
+ sig do
2574
+ params(label: String, phone_number: String).returns(T.attached_class)
2575
+ end
2576
+ def self.new(
2577
+ # Human-meaningful name for this destination (e.g. "Sales"). The assistant's
2578
+ # prompt refers to these labels when describing who to transfer to.
2579
+ label:,
2580
+ # Destination phone number in E.164 format (e.g. +1234567890).
2581
+ phone_number:
2582
+ )
2583
+ end
2584
+
2585
+ sig { override.returns({ label: String, phone_number: String }) }
2586
+ def to_hash
2587
+ end
2588
+ end
2589
+
2594
2590
  # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
2595
2591
  # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
2596
2592
  # multi-step flow (hidden from the assistants list). Flow transitions are managed
@@ -2652,7 +2648,7 @@ module Revox
2652
2648
  attr_writer :model
2653
2649
 
2654
2650
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
2655
- # 0.7–1.2. Default is 1.0.
2651
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
2656
2652
  sig { returns(T.nilable(Float)) }
2657
2653
  attr_reader :speed
2658
2654
 
@@ -2687,7 +2683,7 @@ module Revox
2687
2683
  # for other providers.
2688
2684
  model: nil,
2689
2685
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
2690
- # 0.7–1.2. Default is 1.0.
2686
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
2691
2687
  speed: nil,
2692
2688
  # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
2693
2689
  # providers.
@@ -2729,6 +2725,11 @@ module Revox
2729
2725
  :elevenlabs,
2730
2726
  Revox::AssistantUpdateParams::Voice::Provider::TaggedSymbol
2731
2727
  )
2728
+ GRADIUM =
2729
+ T.let(
2730
+ :gradium,
2731
+ Revox::AssistantUpdateParams::Voice::Provider::TaggedSymbol
2732
+ )
2732
2733
 
2733
2734
  sig do
2734
2735
  override.returns(
@@ -2937,21 +2938,6 @@ module Revox
2937
2938
  :requested_callback_later,
2938
2939
  Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
2939
2940
  )
2940
- REQUESTED_CALLBACK_NEW_NUMBER =
2941
- T.let(
2942
- :requested_callback_new_number,
2943
- Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
2944
- )
2945
- DO_NOT_CONTACT =
2946
- T.let(
2947
- :do_not_contact,
2948
- Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
2949
- )
2950
- AI_AVERSE =
2951
- T.let(
2952
- :ai_averse,
2953
- Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
2954
- )
2955
2941
  NONE =
2956
2942
  T.let(
2957
2943
  :none,