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
@@ -223,6 +223,12 @@ module Revox
223
223
  sig { returns(T.anything) }
224
224
  attr_accessor :updated_at
225
225
 
226
+ # Extra notification recipients resolved from the agent prompt's own routing
227
+ # rules, when it defines any. Added to the assistant's configured notification
228
+ # recipients; never replaces them. Null when the prompt defines no routing rules.
229
+ sig { returns(T.nilable(T::Array[String])) }
230
+ attr_accessor :follow_up_emails
231
+
226
232
  # Business outcome of the call. Null if not computed or no transcript.
227
233
  sig do
228
234
  returns(
@@ -237,6 +243,13 @@ module Revox
237
243
  sig { returns(T.nilable(String)) }
238
244
  attr_accessor :outcome_summary
239
245
 
246
+ # Slack channels resolved from the agent prompt's own routing rules, when it
247
+ # defines any. Always a subset of the channels configured on the assistant. Null
248
+ # when the prompt defines no routing rules, in which case every configured channel
249
+ # is notified.
250
+ sig { returns(T.nilable(T::Array[String])) }
251
+ attr_accessor :slack_channel_ids
252
+
240
253
  # This represent a call "order" that was requested by the user. A call order can
241
254
  # be resolved over multiple call attempts spanning up to a few days.
242
255
  sig do
@@ -289,11 +302,13 @@ module Revox
289
302
  status: Revox::Models::CallCreateResponse::Call::Status::OrSymbol,
290
303
  to_phone_number: String,
291
304
  updated_at: T.anything,
305
+ follow_up_emails: T.nilable(T::Array[String]),
292
306
  outcome:
293
307
  T.nilable(
294
308
  Revox::Models::CallCreateResponse::Call::Outcome::OrSymbol
295
309
  ),
296
- outcome_summary: T.nilable(String)
310
+ outcome_summary: T.nilable(String),
311
+ slack_channel_ids: T.nilable(T::Array[String])
297
312
  ).returns(T.attached_class)
298
313
  end
299
314
  def self.new(
@@ -348,10 +363,19 @@ module Revox
348
363
  # The time the call order was last updated (any state change, retry, or analysis
349
364
  # result).
350
365
  updated_at:,
366
+ # Extra notification recipients resolved from the agent prompt's own routing
367
+ # rules, when it defines any. Added to the assistant's configured notification
368
+ # recipients; never replaces them. Null when the prompt defines no routing rules.
369
+ follow_up_emails: nil,
351
370
  # Business outcome of the call. Null if not computed or no transcript.
352
371
  outcome: nil,
353
372
  # LLM explanation for the outcome, when outcome was computed from the transcript.
354
- outcome_summary: nil
373
+ outcome_summary: nil,
374
+ # Slack channels resolved from the agent prompt's own routing rules, when it
375
+ # defines any. Always a subset of the channels configured on the assistant. Null
376
+ # when the prompt defines no routing rules, in which case every configured channel
377
+ # is notified.
378
+ slack_channel_ids: nil
355
379
  )
356
380
  end
357
381
 
@@ -394,11 +418,13 @@ module Revox
394
418
  Revox::Models::CallCreateResponse::Call::Status::TaggedSymbol,
395
419
  to_phone_number: String,
396
420
  updated_at: T.anything,
421
+ follow_up_emails: T.nilable(T::Array[String]),
397
422
  outcome:
398
423
  T.nilable(
399
424
  Revox::Models::CallCreateResponse::Call::Outcome::TaggedSymbol
400
425
  ),
401
- outcome_summary: T.nilable(String)
426
+ outcome_summary: T.nilable(String),
427
+ slack_channel_ids: T.nilable(T::Array[String])
402
428
  }
403
429
  )
404
430
  end
@@ -567,14 +593,6 @@ module Revox
567
593
  sig { returns(T.nilable(String)) }
568
594
  attr_accessor :email_notification_address
569
595
 
570
- # The language used for the notification email content. One of "en" or "fr".
571
- sig do
572
- returns(
573
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
574
- )
575
- end
576
- attr_accessor :email_notification_language
577
-
578
596
  # Which call outcomes trigger an email notification. E.g. ["interested",
579
597
  # "completed", "none"]. Use "none" when outcome is null.
580
598
  sig do
@@ -610,8 +628,8 @@ module Revox
610
628
  sig { returns(T.nilable(String)) }
611
629
  attr_accessor :from_phone_number
612
630
 
613
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
614
- # not configured.
631
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
632
+ # transfer is not configured.
615
633
  sig do
616
634
  returns(
617
635
  T.nilable(
@@ -674,6 +692,11 @@ module Revox
674
692
  end
675
693
  attr_writer :position
676
694
 
695
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
696
+ # variables. Null when no lookup is configured.
697
+ sig { returns(T.nilable(String)) }
698
+ attr_accessor :precall_lookup_url
699
+
677
700
  sig { returns(String) }
678
701
  attr_accessor :prompt
679
702
 
@@ -795,9 +818,18 @@ module Revox
795
818
  sig { returns(Float) }
796
819
  attr_accessor :thinking_sound_volume
797
820
 
798
- # Phone number to transfer calls to when users request to speak to a human agent.
799
- sig { returns(T.nilable(String)) }
800
- attr_accessor :transfer_phone_number
821
+ # Where calls can be transferred to when users ask to speak to a human. Null or
822
+ # empty when transfer is not configured.
823
+ sig do
824
+ returns(
825
+ T.nilable(
826
+ T::Array[
827
+ Revox::Models::CallCreateResponse::Call::Assistant::TransferDestination
828
+ ]
829
+ )
830
+ )
831
+ end
832
+ attr_accessor :transfer_destinations
801
833
 
802
834
  sig do
803
835
  returns(
@@ -907,6 +939,12 @@ module Revox
907
939
  end
908
940
  attr_writer :faq_items
909
941
 
942
+ sig { returns(T.nilable(T::Boolean)) }
943
+ attr_reader :is_inbound_receptionist
944
+
945
+ sig { params(is_inbound_receptionist: T::Boolean).void }
946
+ attr_writer :is_inbound_receptionist
947
+
910
948
  sig { returns(T.nilable(T::Boolean)) }
911
949
  attr_reader :is_realestate_assistant
912
950
 
@@ -951,8 +989,6 @@ module Revox
951
989
  ]
952
990
  ),
953
991
  email_notification_address: T.nilable(String),
954
- email_notification_language:
955
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage::OrSymbol,
956
992
  email_notification_outcomes:
957
993
  T.nilable(
958
994
  T::Array[
@@ -986,6 +1022,7 @@ module Revox
986
1022
  T.nilable(
987
1023
  Revox::Models::CallCreateResponse::Call::Assistant::Position::OrHash
988
1024
  ),
1025
+ precall_lookup_url: T.nilable(String),
989
1026
  prompt: String,
990
1027
  prompt_flow:
991
1028
  T.nilable(
@@ -1016,7 +1053,12 @@ module Revox
1016
1053
  ),
1017
1054
  thinking_sound_probability: Float,
1018
1055
  thinking_sound_volume: Float,
1019
- transfer_phone_number: T.nilable(String),
1056
+ transfer_destinations:
1057
+ T.nilable(
1058
+ T::Array[
1059
+ Revox::Models::CallCreateResponse::Call::Assistant::TransferDestination::OrHash
1060
+ ]
1061
+ ),
1020
1062
  type:
1021
1063
  Revox::Models::CallCreateResponse::Call::Assistant::Type::OrSymbol,
1022
1064
  updated_at: T.anything,
@@ -1040,6 +1082,7 @@ module Revox
1040
1082
  T::Array[
1041
1083
  Revox::Models::CallCreateResponse::Call::Assistant::FaqItem::OrHash
1042
1084
  ],
1085
+ is_inbound_receptionist: T::Boolean,
1043
1086
  is_realestate_assistant: T::Boolean,
1044
1087
  pending_faq_count: Float
1045
1088
  ).returns(T.attached_class)
@@ -1068,8 +1111,6 @@ module Revox
1068
1111
  # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
1069
1112
  # bob@y.com").
1070
1113
  email_notification_address:,
1071
- # The language used for the notification email content. One of "en" or "fr".
1072
- email_notification_language:,
1073
1114
  # Which call outcomes trigger an email notification. E.g. ["interested",
1074
1115
  # "completed", "none"]. Use "none" when outcome is null.
1075
1116
  email_notification_outcomes:,
@@ -1081,8 +1122,8 @@ module Revox
1081
1122
  # Override the default outbound phone number for calls placed with this assistant.
1082
1123
  # When null, the organization's default phone number is used.
1083
1124
  from_phone_number:,
1084
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1085
- # not configured.
1125
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
1126
+ # transfer is not configured.
1086
1127
  human_transfer_mode:,
1087
1128
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
1088
1129
  # skip turns to navigate phone menus.
@@ -1101,6 +1142,9 @@ module Revox
1101
1142
  name:,
1102
1143
  organization_id:,
1103
1144
  position:,
1145
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
1146
+ # variables. Null when no lookup is configured.
1147
+ precall_lookup_url:,
1104
1148
  prompt:,
1105
1149
  prompt_flow:,
1106
1150
  slack:,
@@ -1132,8 +1176,9 @@ module Revox
1132
1176
  thinking_sound_probability:,
1133
1177
  # Volume of the thinking sound (0 = silent, 1 = max).
1134
1178
  thinking_sound_volume:,
1135
- # Phone number to transfer calls to when users request to speak to a human agent.
1136
- transfer_phone_number:,
1179
+ # Where calls can be transferred to when users ask to speak to a human. Null or
1180
+ # empty when transfer is not configured.
1181
+ transfer_destinations:,
1137
1182
  type:,
1138
1183
  updated_at:,
1139
1184
  voice:,
@@ -1152,6 +1197,7 @@ module Revox
1152
1197
  # The user who created the assistant.
1153
1198
  created_by: nil,
1154
1199
  faq_items: nil,
1200
+ is_inbound_receptionist: nil,
1155
1201
  is_realestate_assistant: nil,
1156
1202
  pending_faq_count: nil
1157
1203
  )
@@ -1190,8 +1236,6 @@ module Revox
1190
1236
  ]
1191
1237
  ),
1192
1238
  email_notification_address: T.nilable(String),
1193
- email_notification_language:
1194
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol,
1195
1239
  email_notification_outcomes:
1196
1240
  T.nilable(
1197
1241
  T::Array[
@@ -1220,6 +1264,7 @@ module Revox
1220
1264
  T.nilable(
1221
1265
  Revox::Models::CallCreateResponse::Call::Assistant::Position
1222
1266
  ),
1267
+ precall_lookup_url: T.nilable(String),
1223
1268
  prompt: String,
1224
1269
  prompt_flow:
1225
1270
  T.nilable(
@@ -1250,7 +1295,12 @@ module Revox
1250
1295
  ),
1251
1296
  thinking_sound_probability: Float,
1252
1297
  thinking_sound_volume: Float,
1253
- transfer_phone_number: T.nilable(String),
1298
+ transfer_destinations:
1299
+ T.nilable(
1300
+ T::Array[
1301
+ Revox::Models::CallCreateResponse::Call::Assistant::TransferDestination
1302
+ ]
1303
+ ),
1254
1304
  type:
1255
1305
  Revox::Models::CallCreateResponse::Call::Assistant::Type::TaggedSymbol,
1256
1306
  updated_at: T.anything,
@@ -1274,6 +1324,7 @@ module Revox
1274
1324
  T::Array[
1275
1325
  Revox::Models::CallCreateResponse::Call::Assistant::FaqItem
1276
1326
  ],
1327
+ is_inbound_receptionist: T::Boolean,
1277
1328
  is_realestate_assistant: T::Boolean,
1278
1329
  pending_faq_count: Float
1279
1330
  }
@@ -1314,21 +1365,6 @@ module Revox
1314
1365
  :requested_callback_later,
1315
1366
  Revox::Models::CallCreateResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
1316
1367
  )
1317
- REQUESTED_CALLBACK_NEW_NUMBER =
1318
- T.let(
1319
- :requested_callback_new_number,
1320
- Revox::Models::CallCreateResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
1321
- )
1322
- DO_NOT_CONTACT =
1323
- T.let(
1324
- :do_not_contact,
1325
- Revox::Models::CallCreateResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
1326
- )
1327
- AI_AVERSE =
1328
- T.let(
1329
- :ai_averse,
1330
- Revox::Models::CallCreateResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
1331
- )
1332
1368
  NONE =
1333
1369
  T.let(
1334
1370
  :none,
@@ -1597,7 +1633,8 @@ module Revox
1597
1633
  sig { returns(String) }
1598
1634
  attr_accessor :calling_window_start_time
1599
1635
 
1600
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1636
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1637
+ # allows. Default: 7200 (2 hours).
1601
1638
  sig { returns(Integer) }
1602
1639
  attr_accessor :retry_delay_seconds
1603
1640
 
@@ -1617,7 +1654,8 @@ module Revox
1617
1654
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1618
1655
  # Examples: '09:00', '10am'. Default: '10:00'.
1619
1656
  calling_window_start_time:,
1620
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1657
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1658
+ # allows. Default: 7200 (2 hours).
1621
1659
  retry_delay_seconds:
1622
1660
  )
1623
1661
  end
@@ -2004,41 +2042,6 @@ module Revox
2004
2042
  end
2005
2043
  end
2006
2044
 
2007
- # The language used for the notification email content. One of "en" or "fr".
2008
- module EmailNotificationLanguage
2009
- extend Revox::Internal::Type::Enum
2010
-
2011
- TaggedSymbol =
2012
- T.type_alias do
2013
- T.all(
2014
- Symbol,
2015
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage
2016
- )
2017
- end
2018
- OrSymbol = T.type_alias { T.any(Symbol, String) }
2019
-
2020
- EN =
2021
- T.let(
2022
- :en,
2023
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
2024
- )
2025
- FR =
2026
- T.let(
2027
- :fr,
2028
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
2029
- )
2030
-
2031
- sig do
2032
- override.returns(
2033
- T::Array[
2034
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
2035
- ]
2036
- )
2037
- end
2038
- def self.values
2039
- end
2040
- end
2041
-
2042
2045
  module EmailNotificationOutcome
2043
2046
  extend Revox::Internal::Type::Enum
2044
2047
 
@@ -2071,21 +2074,6 @@ module Revox
2071
2074
  :requested_callback_later,
2072
2075
  Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
2073
2076
  )
2074
- REQUESTED_CALLBACK_NEW_NUMBER =
2075
- T.let(
2076
- :requested_callback_new_number,
2077
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
2078
- )
2079
- DO_NOT_CONTACT =
2080
- T.let(
2081
- :do_not_contact,
2082
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
2083
- )
2084
- AI_AVERSE =
2085
- T.let(
2086
- :ai_averse,
2087
- Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
2088
- )
2089
2077
  NONE =
2090
2078
  T.let(
2091
2079
  :none,
@@ -2142,8 +2130,8 @@ module Revox
2142
2130
  end
2143
2131
  end
2144
2132
 
2145
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
2146
- # not configured.
2133
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
2134
+ # transfer is not configured.
2147
2135
  module HumanTransferMode
2148
2136
  extend Revox::Internal::Type::Enum
2149
2137
 
@@ -2741,9 +2729,17 @@ module Revox
2741
2729
  )
2742
2730
  end
2743
2731
 
2744
- # The Slack channel ID where the notification will be posted.
2745
- sig { returns(String) }
2746
- attr_accessor :channel_id
2732
+ # The Slack channels eligible to receive the notification. When more than one is
2733
+ # configured, the agent prompt may define routing rules to narrow it down per
2734
+ # call; with no such rules every channel here is notified.
2735
+ sig do
2736
+ returns(
2737
+ T::Array[
2738
+ Revox::Models::CallCreateResponse::Call::Assistant::Slack::Channel
2739
+ ]
2740
+ )
2741
+ end
2742
+ attr_accessor :channels
2747
2743
 
2748
2744
  # The Nango connection ID linking the org's Slack workspace to Revox.
2749
2745
  sig { returns(String) }
@@ -2760,45 +2756,43 @@ module Revox
2760
2756
  end
2761
2757
  attr_accessor :outcomes
2762
2758
 
2763
- # Human-readable Slack channel name, cached for display in the UI.
2764
- sig { returns(T.nilable(String)) }
2765
- attr_accessor :channel_name
2766
-
2767
2759
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2768
2760
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2769
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2770
- # prompt_variables and structured_output keys. When null/empty a default template
2771
- # is used.
2761
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2762
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2763
+ # null/empty a default template is used.
2772
2764
  sig { returns(T.nilable(String)) }
2773
2765
  attr_accessor :template
2774
2766
 
2775
2767
  sig do
2776
2768
  params(
2777
- channel_id: String,
2769
+ channels:
2770
+ T::Array[
2771
+ Revox::Models::CallCreateResponse::Call::Assistant::Slack::Channel::OrHash
2772
+ ],
2778
2773
  connection_id: String,
2779
2774
  outcomes:
2780
2775
  T::Array[
2781
2776
  Revox::Models::CallCreateResponse::Call::Assistant::Slack::Outcome::OrSymbol
2782
2777
  ],
2783
- channel_name: T.nilable(String),
2784
2778
  template: T.nilable(String)
2785
2779
  ).returns(T.attached_class)
2786
2780
  end
2787
2781
  def self.new(
2788
- # The Slack channel ID where the notification will be posted.
2789
- channel_id:,
2782
+ # The Slack channels eligible to receive the notification. When more than one is
2783
+ # configured, the agent prompt may define routing rules to narrow it down per
2784
+ # call; with no such rules every channel here is notified.
2785
+ channels:,
2790
2786
  # The Nango connection ID linking the org's Slack workspace to Revox.
2791
2787
  connection_id:,
2792
2788
  # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2793
2789
  # Use 'none' to notify when outcome is null.
2794
2790
  outcomes:,
2795
- # Human-readable Slack channel name, cached for display in the UI.
2796
- channel_name: nil,
2797
2791
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2798
2792
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2799
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2800
- # prompt_variables and structured_output keys. When null/empty a default template
2801
- # is used.
2793
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2794
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2795
+ # null/empty a default template is used.
2802
2796
  template: nil
2803
2797
  )
2804
2798
  end
@@ -2806,13 +2800,15 @@ module Revox
2806
2800
  sig do
2807
2801
  override.returns(
2808
2802
  {
2809
- channel_id: String,
2803
+ channels:
2804
+ T::Array[
2805
+ Revox::Models::CallCreateResponse::Call::Assistant::Slack::Channel
2806
+ ],
2810
2807
  connection_id: String,
2811
2808
  outcomes:
2812
2809
  T::Array[
2813
2810
  Revox::Models::CallCreateResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2814
2811
  ],
2815
- channel_name: T.nilable(String),
2816
2812
  template: T.nilable(String)
2817
2813
  }
2818
2814
  )
@@ -2820,6 +2816,43 @@ module Revox
2820
2816
  def to_hash
2821
2817
  end
2822
2818
 
2819
+ class Channel < Revox::Internal::Type::BaseModel
2820
+ OrHash =
2821
+ T.type_alias do
2822
+ T.any(
2823
+ Revox::Models::CallCreateResponse::Call::Assistant::Slack::Channel,
2824
+ Revox::Internal::AnyHash
2825
+ )
2826
+ end
2827
+
2828
+ # The Slack channel ID (e.g. 'C01234567').
2829
+ sig { returns(String) }
2830
+ attr_accessor :id
2831
+
2832
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2833
+ # LLM when the agent prompt routes by channel name.
2834
+ sig { returns(T.nilable(String)) }
2835
+ attr_accessor :name
2836
+
2837
+ sig do
2838
+ params(id: String, name: T.nilable(String)).returns(
2839
+ T.attached_class
2840
+ )
2841
+ end
2842
+ def self.new(
2843
+ # The Slack channel ID (e.g. 'C01234567').
2844
+ id:,
2845
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2846
+ # LLM when the agent prompt routes by channel name.
2847
+ name: nil
2848
+ )
2849
+ end
2850
+
2851
+ sig { override.returns({ id: String, name: T.nilable(String) }) }
2852
+ def to_hash
2853
+ end
2854
+ end
2855
+
2823
2856
  module Outcome
2824
2857
  extend Revox::Internal::Type::Enum
2825
2858
 
@@ -2852,21 +2885,6 @@ module Revox
2852
2885
  :requested_callback_later,
2853
2886
  Revox::Models::CallCreateResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2854
2887
  )
2855
- REQUESTED_CALLBACK_NEW_NUMBER =
2856
- T.let(
2857
- :requested_callback_new_number,
2858
- Revox::Models::CallCreateResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2859
- )
2860
- DO_NOT_CONTACT =
2861
- T.let(
2862
- :do_not_contact,
2863
- Revox::Models::CallCreateResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2864
- )
2865
- AI_AVERSE =
2866
- T.let(
2867
- :ai_averse,
2868
- Revox::Models::CallCreateResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2869
- )
2870
2888
  NONE =
2871
2889
  T.let(
2872
2890
  :none,
@@ -3181,6 +3199,34 @@ module Revox
3181
3199
  end
3182
3200
  end
3183
3201
 
3202
+ class TransferDestination < Revox::Internal::Type::BaseModel
3203
+ OrHash =
3204
+ T.type_alias do
3205
+ T.any(
3206
+ Revox::Models::CallCreateResponse::Call::Assistant::TransferDestination,
3207
+ Revox::Internal::AnyHash
3208
+ )
3209
+ end
3210
+
3211
+ sig { returns(String) }
3212
+ attr_accessor :label
3213
+
3214
+ sig { returns(String) }
3215
+ attr_accessor :phone_number
3216
+
3217
+ sig do
3218
+ params(label: String, phone_number: String).returns(
3219
+ T.attached_class
3220
+ )
3221
+ end
3222
+ def self.new(label:, phone_number:)
3223
+ end
3224
+
3225
+ sig { override.returns({ label: String, phone_number: String }) }
3226
+ def to_hash
3227
+ end
3228
+ end
3229
+
3184
3230
  module Type
3185
3231
  extend Revox::Internal::Type::Enum
3186
3232
 
@@ -3261,7 +3307,7 @@ module Revox
3261
3307
  attr_writer :model
3262
3308
 
3263
3309
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3264
- # 0.7–1.2. Default is 1.0.
3310
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3265
3311
  sig { returns(T.nilable(Float)) }
3266
3312
  attr_reader :speed
3267
3313
 
@@ -3296,7 +3342,7 @@ module Revox
3296
3342
  # for other providers.
3297
3343
  model: nil,
3298
3344
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3299
- # 0.7–1.2. Default is 1.0.
3345
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3300
3346
  speed: nil,
3301
3347
  # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
3302
3348
  # providers.
@@ -3343,6 +3389,11 @@ module Revox
3343
3389
  :elevenlabs,
3344
3390
  Revox::Models::CallCreateResponse::Call::Assistant::Voice::Provider::TaggedSymbol
3345
3391
  )
3392
+ GRADIUM =
3393
+ T.let(
3394
+ :gradium,
3395
+ Revox::Models::CallCreateResponse::Call::Assistant::Voice::Provider::TaggedSymbol
3396
+ )
3346
3397
 
3347
3398
  sig do
3348
3399
  override.returns(
@@ -3573,21 +3624,6 @@ module Revox
3573
3624
  :requested_callback_later,
3574
3625
  Revox::Models::CallCreateResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
3575
3626
  )
3576
- REQUESTED_CALLBACK_NEW_NUMBER =
3577
- T.let(
3578
- :requested_callback_new_number,
3579
- Revox::Models::CallCreateResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
3580
- )
3581
- DO_NOT_CONTACT =
3582
- T.let(
3583
- :do_not_contact,
3584
- Revox::Models::CallCreateResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
3585
- )
3586
- AI_AVERSE =
3587
- T.let(
3588
- :ai_averse,
3589
- Revox::Models::CallCreateResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
3590
- )
3591
3627
  NONE =
3592
3628
  T.let(
3593
3629
  :none,
@@ -3805,6 +3841,37 @@ module Revox
3805
3841
  sig { returns(T.anything) }
3806
3842
  attr_accessor :ended_at
3807
3843
 
3844
+ # Whether the AI agent conducted the conversation on this attempt. False for a
3845
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
3846
+ # were never answered.
3847
+ sig { returns(T::Boolean) }
3848
+ attr_accessor :handled_by_ai
3849
+
3850
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
3851
+ # or a speed-dial operator connection (both stamp human_takeover_at).
3852
+ sig { returns(T::Boolean) }
3853
+ attr_accessor :handled_by_human
3854
+
3855
+ # The team member responsible for following up on this call.
3856
+ sig do
3857
+ returns(
3858
+ T.nilable(
3859
+ Revox::Models::CallCreateResponse::Call::CallAttempt::HandledByUser
3860
+ )
3861
+ )
3862
+ end
3863
+ attr_reader :handled_by_user
3864
+
3865
+ sig do
3866
+ params(
3867
+ handled_by_user:
3868
+ T.nilable(
3869
+ Revox::Models::CallCreateResponse::Call::CallAttempt::HandledByUser::OrHash
3870
+ )
3871
+ ).void
3872
+ end
3873
+ attr_writer :handled_by_user
3874
+
3808
3875
  # The phone number that was called. Formatted in E.164 format. Example:
3809
3876
  # +1234567890
3810
3877
  sig { returns(String) }
@@ -3839,6 +3906,19 @@ module Revox
3839
3906
  sig { returns(T.nilable(T::Array[String])) }
3840
3907
  attr_accessor :assistants_used
3841
3908
 
3909
+ # Notification emails sent in connection with the call, ordered oldest first
3910
+ # (from/to addresses, subject, sent time).
3911
+ sig do
3912
+ returns(
3913
+ T.nilable(
3914
+ T::Array[
3915
+ Revox::Models::CallCreateResponse::Call::CallAttempt::EmailLog
3916
+ ]
3917
+ )
3918
+ )
3919
+ end
3920
+ attr_accessor :email_log
3921
+
3842
3922
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
3843
3923
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
3844
3924
  sig do
@@ -3888,6 +3968,20 @@ module Revox
3888
3968
  end
3889
3969
  attr_accessor :sms_log
3890
3970
 
3971
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
3972
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
3973
+ # tracked or for realtime sessions that don't emit them.
3974
+ sig do
3975
+ returns(
3976
+ T.nilable(
3977
+ T::Array[
3978
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent
3979
+ ]
3980
+ )
3981
+ )
3982
+ end
3983
+ attr_accessor :speech_events
3984
+
3891
3985
  # The data extracted from the call, using the structured output config from the
3892
3986
  # parent call object.
3893
3987
  sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
@@ -3916,6 +4010,12 @@ module Revox
3916
4010
  Revox::Models::CallCreateResponse::Call::CallAttempt::DialError::OrSymbol
3917
4011
  ),
3918
4012
  ended_at: T.anything,
4013
+ handled_by_ai: T::Boolean,
4014
+ handled_by_human: T::Boolean,
4015
+ handled_by_user:
4016
+ T.nilable(
4017
+ Revox::Models::CallCreateResponse::Call::CallAttempt::HandledByUser::OrHash
4018
+ ),
3919
4019
  phone_number: String,
3920
4020
  recording_url: T.nilable(String),
3921
4021
  result:
@@ -3926,6 +4026,12 @@ module Revox
3926
4026
  status:
3927
4027
  Revox::Models::CallCreateResponse::Call::CallAttempt::Status::OrSymbol,
3928
4028
  assistants_used: T.nilable(T::Array[String]),
4029
+ email_log:
4030
+ T.nilable(
4031
+ T::Array[
4032
+ Revox::Models::CallCreateResponse::Call::CallAttempt::EmailLog::OrHash
4033
+ ]
4034
+ ),
3929
4035
  end_reason:
3930
4036
  T.nilable(
3931
4037
  Revox::Models::CallCreateResponse::Call::CallAttempt::EndReason::OrSymbol
@@ -3946,6 +4052,12 @@ module Revox
3946
4052
  Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::OrHash
3947
4053
  ]
3948
4054
  ),
4055
+ speech_events:
4056
+ T.nilable(
4057
+ T::Array[
4058
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::OrHash
4059
+ ]
4060
+ ),
3949
4061
  structured_output: T.nilable(T::Hash[Symbol, T.anything]),
3950
4062
  transcript:
3951
4063
  T.nilable(
@@ -3964,6 +4076,15 @@ module Revox
3964
4076
  dial_error:,
3965
4077
  # The time the call ended.
3966
4078
  ended_at:,
4079
+ # Whether the AI agent conducted the conversation on this attempt. False for a
4080
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
4081
+ # were never answered.
4082
+ handled_by_ai:,
4083
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
4084
+ # or a speed-dial operator connection (both stamp human_takeover_at).
4085
+ handled_by_human:,
4086
+ # The team member responsible for following up on this call.
4087
+ handled_by_user:,
3967
4088
  # The phone number that was called. Formatted in E.164 format. Example:
3968
4089
  # +1234567890
3969
4090
  phone_number:,
@@ -3976,6 +4097,9 @@ module Revox
3976
4097
  status:,
3977
4098
  # Assistant node ids entered during this attempt, in traversal order.
3978
4099
  assistants_used: nil,
4100
+ # Notification emails sent in connection with the call, ordered oldest first
4101
+ # (from/to addresses, subject, sent time).
4102
+ email_log: nil,
3979
4103
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
3980
4104
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
3981
4105
  end_reason: nil,
@@ -3989,6 +4113,10 @@ module Revox
3989
4113
  # first. The in-call `send_sms` is excluded — it already appears in the transcript
3990
4114
  # as a tool call.
3991
4115
  sms_log: nil,
4116
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
4117
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
4118
+ # tracked or for realtime sessions that don't emit them.
4119
+ speech_events: nil,
3992
4120
  # The data extracted from the call, using the structured output config from the
3993
4121
  # parent call object.
3994
4122
  structured_output: nil,
@@ -4007,6 +4135,12 @@ module Revox
4007
4135
  Revox::Models::CallCreateResponse::Call::CallAttempt::DialError::TaggedSymbol
4008
4136
  ),
4009
4137
  ended_at: T.anything,
4138
+ handled_by_ai: T::Boolean,
4139
+ handled_by_human: T::Boolean,
4140
+ handled_by_user:
4141
+ T.nilable(
4142
+ Revox::Models::CallCreateResponse::Call::CallAttempt::HandledByUser
4143
+ ),
4010
4144
  phone_number: String,
4011
4145
  recording_url: T.nilable(String),
4012
4146
  result:
@@ -4017,6 +4151,12 @@ module Revox
4017
4151
  status:
4018
4152
  Revox::Models::CallCreateResponse::Call::CallAttempt::Status::TaggedSymbol,
4019
4153
  assistants_used: T.nilable(T::Array[String]),
4154
+ email_log:
4155
+ T.nilable(
4156
+ T::Array[
4157
+ Revox::Models::CallCreateResponse::Call::CallAttempt::EmailLog
4158
+ ]
4159
+ ),
4020
4160
  end_reason:
4021
4161
  T.nilable(
4022
4162
  Revox::Models::CallCreateResponse::Call::CallAttempt::EndReason::TaggedSymbol
@@ -4037,6 +4177,12 @@ module Revox
4037
4177
  Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog
4038
4178
  ]
4039
4179
  ),
4180
+ speech_events:
4181
+ T.nilable(
4182
+ T::Array[
4183
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent
4184
+ ]
4185
+ ),
4040
4186
  structured_output: T.nilable(T::Hash[Symbol, T.anything]),
4041
4187
  transcript:
4042
4188
  T.nilable(
@@ -4115,52 +4261,106 @@ module Revox
4115
4261
  end
4116
4262
  end
4117
4263
 
4118
- module Result
4119
- extend Revox::Internal::Type::Enum
4120
-
4121
- TaggedSymbol =
4264
+ class HandledByUser < Revox::Internal::Type::BaseModel
4265
+ OrHash =
4122
4266
  T.type_alias do
4123
- T.all(
4124
- Symbol,
4125
- Revox::Models::CallCreateResponse::Call::CallAttempt::Result
4267
+ T.any(
4268
+ Revox::Models::CallCreateResponse::Call::CallAttempt::HandledByUser,
4269
+ Revox::Internal::AnyHash
4126
4270
  )
4127
4271
  end
4128
- OrSymbol = T.type_alias { T.any(Symbol, String) }
4129
4272
 
4130
- IVR =
4131
- T.let(
4132
- :IVR,
4133
- Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4134
- )
4135
- VOICEMAIL =
4136
- T.let(
4137
- :voicemail,
4138
- Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4139
- )
4140
- HUMAN =
4141
- T.let(
4142
- :human,
4143
- Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4144
- )
4145
- UNKNOWN =
4146
- T.let(
4147
- :unknown,
4148
- Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4149
- )
4150
- IOS_SCREENING_FILTER =
4151
- T.let(
4152
- :"ios-screening-filter",
4153
- Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4154
- )
4273
+ # The database user id of the assignee.
4274
+ sig { returns(String) }
4275
+ attr_accessor :id
4155
4276
 
4156
- sig do
4157
- override.returns(
4158
- T::Array[
4159
- Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4160
- ]
4161
- )
4162
- end
4163
- def self.values
4277
+ sig { returns(String) }
4278
+ attr_accessor :email
4279
+
4280
+ sig { returns(T.nilable(String)) }
4281
+ attr_accessor :first_name
4282
+
4283
+ sig { returns(T.nilable(String)) }
4284
+ attr_accessor :last_name
4285
+
4286
+ # The team member responsible for following up on this call.
4287
+ sig do
4288
+ params(
4289
+ id: String,
4290
+ email: String,
4291
+ first_name: T.nilable(String),
4292
+ last_name: T.nilable(String)
4293
+ ).returns(T.attached_class)
4294
+ end
4295
+ def self.new(
4296
+ # The database user id of the assignee.
4297
+ id:,
4298
+ email:,
4299
+ first_name:,
4300
+ last_name:
4301
+ )
4302
+ end
4303
+
4304
+ sig do
4305
+ override.returns(
4306
+ {
4307
+ id: String,
4308
+ email: String,
4309
+ first_name: T.nilable(String),
4310
+ last_name: T.nilable(String)
4311
+ }
4312
+ )
4313
+ end
4314
+ def to_hash
4315
+ end
4316
+ end
4317
+
4318
+ module Result
4319
+ extend Revox::Internal::Type::Enum
4320
+
4321
+ TaggedSymbol =
4322
+ T.type_alias do
4323
+ T.all(
4324
+ Symbol,
4325
+ Revox::Models::CallCreateResponse::Call::CallAttempt::Result
4326
+ )
4327
+ end
4328
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
4329
+
4330
+ IVR =
4331
+ T.let(
4332
+ :IVR,
4333
+ Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4334
+ )
4335
+ VOICEMAIL =
4336
+ T.let(
4337
+ :voicemail,
4338
+ Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4339
+ )
4340
+ HUMAN =
4341
+ T.let(
4342
+ :human,
4343
+ Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4344
+ )
4345
+ UNKNOWN =
4346
+ T.let(
4347
+ :unknown,
4348
+ Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4349
+ )
4350
+ IOS_SCREENING_FILTER =
4351
+ T.let(
4352
+ :"ios-screening-filter",
4353
+ Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4354
+ )
4355
+
4356
+ sig do
4357
+ override.returns(
4358
+ T::Array[
4359
+ Revox::Models::CallCreateResponse::Call::CallAttempt::Result::TaggedSymbol
4360
+ ]
4361
+ )
4362
+ end
4363
+ def self.values
4164
4364
  end
4165
4365
  end
4166
4366
 
@@ -4214,6 +4414,71 @@ module Revox
4214
4414
  end
4215
4415
  end
4216
4416
 
4417
+ class EmailLog < Revox::Internal::Type::BaseModel
4418
+ OrHash =
4419
+ T.type_alias do
4420
+ T.any(
4421
+ Revox::Models::CallCreateResponse::Call::CallAttempt::EmailLog,
4422
+ Revox::Internal::AnyHash
4423
+ )
4424
+ end
4425
+
4426
+ sig { returns(String) }
4427
+ attr_accessor :id
4428
+
4429
+ # When the email was sent.
4430
+ sig { returns(T.anything) }
4431
+ attr_accessor :created_at
4432
+
4433
+ sig { returns(String) }
4434
+ attr_accessor :from_address
4435
+
4436
+ sig { returns(T.nilable(String)) }
4437
+ attr_accessor :resend_message_id
4438
+
4439
+ sig { returns(String) }
4440
+ attr_accessor :subject
4441
+
4442
+ sig { returns(T::Array[String]) }
4443
+ attr_accessor :to_emails
4444
+
4445
+ sig do
4446
+ params(
4447
+ id: String,
4448
+ created_at: T.anything,
4449
+ from_address: String,
4450
+ resend_message_id: T.nilable(String),
4451
+ subject: String,
4452
+ to_emails: T::Array[String]
4453
+ ).returns(T.attached_class)
4454
+ end
4455
+ def self.new(
4456
+ id:,
4457
+ # When the email was sent.
4458
+ created_at:,
4459
+ from_address:,
4460
+ resend_message_id:,
4461
+ subject:,
4462
+ to_emails:
4463
+ )
4464
+ end
4465
+
4466
+ sig do
4467
+ override.returns(
4468
+ {
4469
+ id: String,
4470
+ created_at: T.anything,
4471
+ from_address: String,
4472
+ resend_message_id: T.nilable(String),
4473
+ subject: String,
4474
+ to_emails: T::Array[String]
4475
+ }
4476
+ )
4477
+ end
4478
+ def to_hash
4479
+ end
4480
+ end
4481
+
4217
4482
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
4218
4483
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
4219
4484
  module EndReason
@@ -4541,11 +4806,18 @@ module Revox
4541
4806
  sig { returns(String) }
4542
4807
  attr_accessor :message_body
4543
4808
 
4544
- sig { returns(String) }
4545
- attr_accessor :to_phone_number
4809
+ sig do
4810
+ returns(
4811
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
4812
+ )
4813
+ end
4814
+ attr_accessor :provider
4546
4815
 
4547
4816
  sig { returns(T.nilable(String)) }
4548
- attr_accessor :twilio_message_sid
4817
+ attr_accessor :provider_message_id
4818
+
4819
+ sig { returns(String) }
4820
+ attr_accessor :to_phone_number
4549
4821
 
4550
4822
  sig do
4551
4823
  returns(
@@ -4559,8 +4831,10 @@ module Revox
4559
4831
  id: String,
4560
4832
  created_at: T.anything,
4561
4833
  message_body: String,
4834
+ provider:
4835
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider::OrSymbol,
4836
+ provider_message_id: T.nilable(String),
4562
4837
  to_phone_number: String,
4563
- twilio_message_sid: T.nilable(String),
4564
4838
  type:
4565
4839
  Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Type::OrSymbol
4566
4840
  ).returns(T.attached_class)
@@ -4570,8 +4844,9 @@ module Revox
4570
4844
  # When the SMS was sent.
4571
4845
  created_at:,
4572
4846
  message_body:,
4847
+ provider:,
4848
+ provider_message_id:,
4573
4849
  to_phone_number:,
4574
- twilio_message_sid:,
4575
4850
  type:
4576
4851
  )
4577
4852
  end
@@ -4582,8 +4857,10 @@ module Revox
4582
4857
  id: String,
4583
4858
  created_at: T.anything,
4584
4859
  message_body: String,
4860
+ provider:
4861
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol,
4862
+ provider_message_id: T.nilable(String),
4585
4863
  to_phone_number: String,
4586
- twilio_message_sid: T.nilable(String),
4587
4864
  type:
4588
4865
  Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Type::TaggedSymbol
4589
4866
  }
@@ -4592,6 +4869,40 @@ module Revox
4592
4869
  def to_hash
4593
4870
  end
4594
4871
 
4872
+ module Provider
4873
+ extend Revox::Internal::Type::Enum
4874
+
4875
+ TaggedSymbol =
4876
+ T.type_alias do
4877
+ T.all(
4878
+ Symbol,
4879
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider
4880
+ )
4881
+ end
4882
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
4883
+
4884
+ TWILIO =
4885
+ T.let(
4886
+ :twilio,
4887
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
4888
+ )
4889
+ VONAGE =
4890
+ T.let(
4891
+ :vonage,
4892
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
4893
+ )
4894
+
4895
+ sig do
4896
+ override.returns(
4897
+ T::Array[
4898
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
4899
+ ]
4900
+ )
4901
+ end
4902
+ def self.values
4903
+ end
4904
+ end
4905
+
4595
4906
  module Type
4596
4907
  extend Revox::Internal::Type::Enum
4597
4908
 
@@ -4632,6 +4943,176 @@ module Revox
4632
4943
  end
4633
4944
  end
4634
4945
 
4946
+ class SpeechEvent < Revox::Internal::Type::BaseModel
4947
+ OrHash =
4948
+ T.type_alias do
4949
+ T.any(
4950
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent,
4951
+ Revox::Internal::AnyHash
4952
+ )
4953
+ end
4954
+
4955
+ sig { returns(String) }
4956
+ attr_accessor :id
4957
+
4958
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
4959
+ sig { returns(T::Boolean) }
4960
+ attr_accessor :is_real_turn
4961
+
4962
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
4963
+ # system instructions plus conversation history — as JSON.
4964
+ sig { returns(T.nilable(String)) }
4965
+ attr_accessor :llm_system_prompt
4966
+
4967
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
4968
+ sig { returns(T.nilable(Float)) }
4969
+ attr_accessor :llm_ttft_ms
4970
+
4971
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
4972
+ # a race, which is also the model `llm_ttft_ms` describes.
4973
+ sig { returns(T.nilable(String)) }
4974
+ attr_accessor :llm_winner_model
4975
+
4976
+ # Who was speaking during this segment.
4977
+ sig do
4978
+ returns(
4979
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
4980
+ )
4981
+ end
4982
+ attr_accessor :speaker
4983
+
4984
+ # Milliseconds since session start when speech began.
4985
+ sig { returns(Float) }
4986
+ attr_accessor :started_speaking_at_ms
4987
+
4988
+ # Milliseconds since session start when speech ended. Null when the session ended
4989
+ # before the turn closed.
4990
+ sig { returns(T.nilable(Float)) }
4991
+ attr_accessor :stopped_speaking_at_ms
4992
+
4993
+ # User-only: time from end-of-speech to final transcript, in ms.
4994
+ sig { returns(T.nilable(Float)) }
4995
+ attr_accessor :stt_transcription_delay_ms
4996
+
4997
+ # Recognized text for this segment, when available.
4998
+ sig { returns(T.nilable(String)) }
4999
+ attr_accessor :transcript
5000
+
5001
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
5002
+ sig { returns(T.nilable(Float)) }
5003
+ attr_accessor :tts_ttfb_ms
5004
+
5005
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
5006
+ # Null on user segments.
5007
+ sig { returns(T.nilable(T::Boolean)) }
5008
+ attr_accessor :was_cut
5009
+
5010
+ sig do
5011
+ params(
5012
+ id: String,
5013
+ is_real_turn: T::Boolean,
5014
+ llm_system_prompt: T.nilable(String),
5015
+ llm_ttft_ms: T.nilable(Float),
5016
+ llm_winner_model: T.nilable(String),
5017
+ speaker:
5018
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker::OrSymbol,
5019
+ started_speaking_at_ms: Float,
5020
+ stopped_speaking_at_ms: T.nilable(Float),
5021
+ stt_transcription_delay_ms: T.nilable(Float),
5022
+ transcript: T.nilable(String),
5023
+ tts_ttfb_ms: T.nilable(Float),
5024
+ was_cut: T.nilable(T::Boolean)
5025
+ ).returns(T.attached_class)
5026
+ end
5027
+ def self.new(
5028
+ id:,
5029
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
5030
+ is_real_turn:,
5031
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
5032
+ # system instructions plus conversation history — as JSON.
5033
+ llm_system_prompt:,
5034
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
5035
+ llm_ttft_ms:,
5036
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
5037
+ # a race, which is also the model `llm_ttft_ms` describes.
5038
+ llm_winner_model:,
5039
+ # Who was speaking during this segment.
5040
+ speaker:,
5041
+ # Milliseconds since session start when speech began.
5042
+ started_speaking_at_ms:,
5043
+ # Milliseconds since session start when speech ended. Null when the session ended
5044
+ # before the turn closed.
5045
+ stopped_speaking_at_ms:,
5046
+ # User-only: time from end-of-speech to final transcript, in ms.
5047
+ stt_transcription_delay_ms:,
5048
+ # Recognized text for this segment, when available.
5049
+ transcript:,
5050
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
5051
+ tts_ttfb_ms:,
5052
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
5053
+ # Null on user segments.
5054
+ was_cut:
5055
+ )
5056
+ end
5057
+
5058
+ sig do
5059
+ override.returns(
5060
+ {
5061
+ id: String,
5062
+ is_real_turn: T::Boolean,
5063
+ llm_system_prompt: T.nilable(String),
5064
+ llm_ttft_ms: T.nilable(Float),
5065
+ llm_winner_model: T.nilable(String),
5066
+ speaker:
5067
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol,
5068
+ started_speaking_at_ms: Float,
5069
+ stopped_speaking_at_ms: T.nilable(Float),
5070
+ stt_transcription_delay_ms: T.nilable(Float),
5071
+ transcript: T.nilable(String),
5072
+ tts_ttfb_ms: T.nilable(Float),
5073
+ was_cut: T.nilable(T::Boolean)
5074
+ }
5075
+ )
5076
+ end
5077
+ def to_hash
5078
+ end
5079
+
5080
+ # Who was speaking during this segment.
5081
+ module Speaker
5082
+ extend Revox::Internal::Type::Enum
5083
+
5084
+ TaggedSymbol =
5085
+ T.type_alias do
5086
+ T.all(
5087
+ Symbol,
5088
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker
5089
+ )
5090
+ end
5091
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
5092
+
5093
+ USER =
5094
+ T.let(
5095
+ :user,
5096
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
5097
+ )
5098
+ AGENT =
5099
+ T.let(
5100
+ :agent,
5101
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
5102
+ )
5103
+
5104
+ sig do
5105
+ override.returns(
5106
+ T::Array[
5107
+ Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
5108
+ ]
5109
+ )
5110
+ end
5111
+ def self.values
5112
+ end
5113
+ end
5114
+ end
5115
+
4635
5116
  class Transcript < Revox::Internal::Type::BaseModel
4636
5117
  OrHash =
4637
5118
  T.type_alias do
@@ -4976,7 +5457,8 @@ module Revox
4976
5457
  sig { returns(String) }
4977
5458
  attr_accessor :calling_window_start_time
4978
5459
 
4979
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
5460
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
5461
+ # allows. Default: 7200 (2 hours).
4980
5462
  sig { returns(Integer) }
4981
5463
  attr_accessor :retry_delay_seconds
4982
5464
 
@@ -4996,7 +5478,8 @@ module Revox
4996
5478
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
4997
5479
  # Examples: '09:00', '10am'. Default: '10:00'.
4998
5480
  calling_window_start_time:,
4999
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
5481
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
5482
+ # allows. Default: 7200 (2 hours).
5000
5483
  retry_delay_seconds:
5001
5484
  )
5002
5485
  end
@@ -5057,6 +5540,9 @@ module Revox
5057
5540
  sig { returns(T.nilable(String)) }
5058
5541
  attr_accessor :first_name
5059
5542
 
5543
+ sig { returns(T.nilable(String)) }
5544
+ attr_accessor :job_title
5545
+
5060
5546
  sig { returns(T.nilable(String)) }
5061
5547
  attr_accessor :last_name
5062
5548
 
@@ -5067,10 +5553,11 @@ module Revox
5067
5553
  company: T.nilable(String),
5068
5554
  email: T.nilable(String),
5069
5555
  first_name: T.nilable(String),
5556
+ job_title: T.nilable(String),
5070
5557
  last_name: T.nilable(String)
5071
5558
  ).returns(T.attached_class)
5072
5559
  end
5073
- def self.new(company:, email:, first_name:, last_name:)
5560
+ def self.new(company:, email:, first_name:, job_title:, last_name:)
5074
5561
  end
5075
5562
 
5076
5563
  sig do
@@ -5079,6 +5566,7 @@ module Revox
5079
5566
  company: T.nilable(String),
5080
5567
  email: T.nilable(String),
5081
5568
  first_name: T.nilable(String),
5569
+ job_title: T.nilable(String),
5082
5570
  last_name: T.nilable(String)
5083
5571
  }
5084
5572
  )
@@ -5150,6 +5638,37 @@ module Revox
5150
5638
  sig { returns(T.anything) }
5151
5639
  attr_accessor :ended_at
5152
5640
 
5641
+ # Whether the AI agent conducted the conversation on this attempt. False for a
5642
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
5643
+ # were never answered.
5644
+ sig { returns(T::Boolean) }
5645
+ attr_accessor :handled_by_ai
5646
+
5647
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
5648
+ # or a speed-dial operator connection (both stamp human_takeover_at).
5649
+ sig { returns(T::Boolean) }
5650
+ attr_accessor :handled_by_human
5651
+
5652
+ # The team member responsible for following up on this call.
5653
+ sig do
5654
+ returns(
5655
+ T.nilable(
5656
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::HandledByUser
5657
+ )
5658
+ )
5659
+ end
5660
+ attr_reader :handled_by_user
5661
+
5662
+ sig do
5663
+ params(
5664
+ handled_by_user:
5665
+ T.nilable(
5666
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::HandledByUser::OrHash
5667
+ )
5668
+ ).void
5669
+ end
5670
+ attr_writer :handled_by_user
5671
+
5153
5672
  # The phone number that was called. Formatted in E.164 format. Example:
5154
5673
  # +1234567890
5155
5674
  sig { returns(String) }
@@ -5184,6 +5703,19 @@ module Revox
5184
5703
  sig { returns(T.nilable(T::Array[String])) }
5185
5704
  attr_accessor :assistants_used
5186
5705
 
5706
+ # Notification emails sent in connection with the call, ordered oldest first
5707
+ # (from/to addresses, subject, sent time).
5708
+ sig do
5709
+ returns(
5710
+ T.nilable(
5711
+ T::Array[
5712
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::EmailLog
5713
+ ]
5714
+ )
5715
+ )
5716
+ end
5717
+ attr_accessor :email_log
5718
+
5187
5719
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
5188
5720
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
5189
5721
  sig do
@@ -5217,21 +5749,35 @@ module Revox
5217
5749
  )
5218
5750
  )
5219
5751
  end
5220
- attr_accessor :post_call_transcript
5752
+ attr_accessor :post_call_transcript
5753
+
5754
+ # Automatic SMS sent after the call (voicemail and after-call), ordered oldest
5755
+ # first. The in-call `send_sms` is excluded — it already appears in the transcript
5756
+ # as a tool call.
5757
+ sig do
5758
+ returns(
5759
+ T.nilable(
5760
+ T::Array[
5761
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog
5762
+ ]
5763
+ )
5764
+ )
5765
+ end
5766
+ attr_accessor :sms_log
5221
5767
 
5222
- # Automatic SMS sent after the call (voicemail and after-call), ordered oldest
5223
- # first. The in-call `send_sms` is excluded it already appears in the transcript
5224
- # as a tool call.
5768
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
5769
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
5770
+ # tracked or for realtime sessions that don't emit them.
5225
5771
  sig do
5226
5772
  returns(
5227
5773
  T.nilable(
5228
5774
  T::Array[
5229
- Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog
5775
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent
5230
5776
  ]
5231
5777
  )
5232
5778
  )
5233
5779
  end
5234
- attr_accessor :sms_log
5780
+ attr_accessor :speech_events
5235
5781
 
5236
5782
  # The data extracted from the call, using the structured output config from the
5237
5783
  # parent call object.
@@ -5261,6 +5807,12 @@ module Revox
5261
5807
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::DialError::OrSymbol
5262
5808
  ),
5263
5809
  ended_at: T.anything,
5810
+ handled_by_ai: T::Boolean,
5811
+ handled_by_human: T::Boolean,
5812
+ handled_by_user:
5813
+ T.nilable(
5814
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::HandledByUser::OrHash
5815
+ ),
5264
5816
  phone_number: String,
5265
5817
  recording_url: T.nilable(String),
5266
5818
  result:
@@ -5271,6 +5823,12 @@ module Revox
5271
5823
  status:
5272
5824
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::Status::OrSymbol,
5273
5825
  assistants_used: T.nilable(T::Array[String]),
5826
+ email_log:
5827
+ T.nilable(
5828
+ T::Array[
5829
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::EmailLog::OrHash
5830
+ ]
5831
+ ),
5274
5832
  end_reason:
5275
5833
  T.nilable(
5276
5834
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::EndReason::OrSymbol
@@ -5291,6 +5849,12 @@ module Revox
5291
5849
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::OrHash
5292
5850
  ]
5293
5851
  ),
5852
+ speech_events:
5853
+ T.nilable(
5854
+ T::Array[
5855
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::OrHash
5856
+ ]
5857
+ ),
5294
5858
  structured_output: T.nilable(T::Hash[Symbol, T.anything]),
5295
5859
  transcript:
5296
5860
  T.nilable(
@@ -5309,6 +5873,15 @@ module Revox
5309
5873
  dial_error:,
5310
5874
  # The time the call ended.
5311
5875
  ended_at:,
5876
+ # Whether the AI agent conducted the conversation on this attempt. False for a
5877
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
5878
+ # were never answered.
5879
+ handled_by_ai:,
5880
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
5881
+ # or a speed-dial operator connection (both stamp human_takeover_at).
5882
+ handled_by_human:,
5883
+ # The team member responsible for following up on this call.
5884
+ handled_by_user:,
5312
5885
  # The phone number that was called. Formatted in E.164 format. Example:
5313
5886
  # +1234567890
5314
5887
  phone_number:,
@@ -5321,6 +5894,9 @@ module Revox
5321
5894
  status:,
5322
5895
  # Assistant node ids entered during this attempt, in traversal order.
5323
5896
  assistants_used: nil,
5897
+ # Notification emails sent in connection with the call, ordered oldest first
5898
+ # (from/to addresses, subject, sent time).
5899
+ email_log: nil,
5324
5900
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
5325
5901
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
5326
5902
  end_reason: nil,
@@ -5334,6 +5910,10 @@ module Revox
5334
5910
  # first. The in-call `send_sms` is excluded — it already appears in the transcript
5335
5911
  # as a tool call.
5336
5912
  sms_log: nil,
5913
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
5914
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
5915
+ # tracked or for realtime sessions that don't emit them.
5916
+ speech_events: nil,
5337
5917
  # The data extracted from the call, using the structured output config from the
5338
5918
  # parent call object.
5339
5919
  structured_output: nil,
@@ -5352,6 +5932,12 @@ module Revox
5352
5932
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::DialError::TaggedSymbol
5353
5933
  ),
5354
5934
  ended_at: T.anything,
5935
+ handled_by_ai: T::Boolean,
5936
+ handled_by_human: T::Boolean,
5937
+ handled_by_user:
5938
+ T.nilable(
5939
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::HandledByUser
5940
+ ),
5355
5941
  phone_number: String,
5356
5942
  recording_url: T.nilable(String),
5357
5943
  result:
@@ -5362,6 +5948,12 @@ module Revox
5362
5948
  status:
5363
5949
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::Status::TaggedSymbol,
5364
5950
  assistants_used: T.nilable(T::Array[String]),
5951
+ email_log:
5952
+ T.nilable(
5953
+ T::Array[
5954
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::EmailLog
5955
+ ]
5956
+ ),
5365
5957
  end_reason:
5366
5958
  T.nilable(
5367
5959
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::EndReason::TaggedSymbol
@@ -5382,6 +5974,12 @@ module Revox
5382
5974
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog
5383
5975
  ]
5384
5976
  ),
5977
+ speech_events:
5978
+ T.nilable(
5979
+ T::Array[
5980
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent
5981
+ ]
5982
+ ),
5385
5983
  structured_output: T.nilable(T::Hash[Symbol, T.anything]),
5386
5984
  transcript:
5387
5985
  T.nilable(
@@ -5460,6 +6058,60 @@ module Revox
5460
6058
  end
5461
6059
  end
5462
6060
 
6061
+ class HandledByUser < Revox::Internal::Type::BaseModel
6062
+ OrHash =
6063
+ T.type_alias do
6064
+ T.any(
6065
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::HandledByUser,
6066
+ Revox::Internal::AnyHash
6067
+ )
6068
+ end
6069
+
6070
+ # The database user id of the assignee.
6071
+ sig { returns(String) }
6072
+ attr_accessor :id
6073
+
6074
+ sig { returns(String) }
6075
+ attr_accessor :email
6076
+
6077
+ sig { returns(T.nilable(String)) }
6078
+ attr_accessor :first_name
6079
+
6080
+ sig { returns(T.nilable(String)) }
6081
+ attr_accessor :last_name
6082
+
6083
+ # The team member responsible for following up on this call.
6084
+ sig do
6085
+ params(
6086
+ id: String,
6087
+ email: String,
6088
+ first_name: T.nilable(String),
6089
+ last_name: T.nilable(String)
6090
+ ).returns(T.attached_class)
6091
+ end
6092
+ def self.new(
6093
+ # The database user id of the assignee.
6094
+ id:,
6095
+ email:,
6096
+ first_name:,
6097
+ last_name:
6098
+ )
6099
+ end
6100
+
6101
+ sig do
6102
+ override.returns(
6103
+ {
6104
+ id: String,
6105
+ email: String,
6106
+ first_name: T.nilable(String),
6107
+ last_name: T.nilable(String)
6108
+ }
6109
+ )
6110
+ end
6111
+ def to_hash
6112
+ end
6113
+ end
6114
+
5463
6115
  module Result
5464
6116
  extend Revox::Internal::Type::Enum
5465
6117
 
@@ -5559,6 +6211,71 @@ module Revox
5559
6211
  end
5560
6212
  end
5561
6213
 
6214
+ class EmailLog < Revox::Internal::Type::BaseModel
6215
+ OrHash =
6216
+ T.type_alias do
6217
+ T.any(
6218
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::EmailLog,
6219
+ Revox::Internal::AnyHash
6220
+ )
6221
+ end
6222
+
6223
+ sig { returns(String) }
6224
+ attr_accessor :id
6225
+
6226
+ # When the email was sent.
6227
+ sig { returns(T.anything) }
6228
+ attr_accessor :created_at
6229
+
6230
+ sig { returns(String) }
6231
+ attr_accessor :from_address
6232
+
6233
+ sig { returns(T.nilable(String)) }
6234
+ attr_accessor :resend_message_id
6235
+
6236
+ sig { returns(String) }
6237
+ attr_accessor :subject
6238
+
6239
+ sig { returns(T::Array[String]) }
6240
+ attr_accessor :to_emails
6241
+
6242
+ sig do
6243
+ params(
6244
+ id: String,
6245
+ created_at: T.anything,
6246
+ from_address: String,
6247
+ resend_message_id: T.nilable(String),
6248
+ subject: String,
6249
+ to_emails: T::Array[String]
6250
+ ).returns(T.attached_class)
6251
+ end
6252
+ def self.new(
6253
+ id:,
6254
+ # When the email was sent.
6255
+ created_at:,
6256
+ from_address:,
6257
+ resend_message_id:,
6258
+ subject:,
6259
+ to_emails:
6260
+ )
6261
+ end
6262
+
6263
+ sig do
6264
+ override.returns(
6265
+ {
6266
+ id: String,
6267
+ created_at: T.anything,
6268
+ from_address: String,
6269
+ resend_message_id: T.nilable(String),
6270
+ subject: String,
6271
+ to_emails: T::Array[String]
6272
+ }
6273
+ )
6274
+ end
6275
+ def to_hash
6276
+ end
6277
+ end
6278
+
5562
6279
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
5563
6280
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
5564
6281
  module EndReason
@@ -5886,11 +6603,18 @@ module Revox
5886
6603
  sig { returns(String) }
5887
6604
  attr_accessor :message_body
5888
6605
 
5889
- sig { returns(String) }
5890
- attr_accessor :to_phone_number
6606
+ sig do
6607
+ returns(
6608
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
6609
+ )
6610
+ end
6611
+ attr_accessor :provider
5891
6612
 
5892
6613
  sig { returns(T.nilable(String)) }
5893
- attr_accessor :twilio_message_sid
6614
+ attr_accessor :provider_message_id
6615
+
6616
+ sig { returns(String) }
6617
+ attr_accessor :to_phone_number
5894
6618
 
5895
6619
  sig do
5896
6620
  returns(
@@ -5904,8 +6628,10 @@ module Revox
5904
6628
  id: String,
5905
6629
  created_at: T.anything,
5906
6630
  message_body: String,
6631
+ provider:
6632
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider::OrSymbol,
6633
+ provider_message_id: T.nilable(String),
5907
6634
  to_phone_number: String,
5908
- twilio_message_sid: T.nilable(String),
5909
6635
  type:
5910
6636
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Type::OrSymbol
5911
6637
  ).returns(T.attached_class)
@@ -5915,8 +6641,9 @@ module Revox
5915
6641
  # When the SMS was sent.
5916
6642
  created_at:,
5917
6643
  message_body:,
6644
+ provider:,
6645
+ provider_message_id:,
5918
6646
  to_phone_number:,
5919
- twilio_message_sid:,
5920
6647
  type:
5921
6648
  )
5922
6649
  end
@@ -5927,8 +6654,10 @@ module Revox
5927
6654
  id: String,
5928
6655
  created_at: T.anything,
5929
6656
  message_body: String,
6657
+ provider:
6658
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol,
6659
+ provider_message_id: T.nilable(String),
5930
6660
  to_phone_number: String,
5931
- twilio_message_sid: T.nilable(String),
5932
6661
  type:
5933
6662
  Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Type::TaggedSymbol
5934
6663
  }
@@ -5937,6 +6666,40 @@ module Revox
5937
6666
  def to_hash
5938
6667
  end
5939
6668
 
6669
+ module Provider
6670
+ extend Revox::Internal::Type::Enum
6671
+
6672
+ TaggedSymbol =
6673
+ T.type_alias do
6674
+ T.all(
6675
+ Symbol,
6676
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider
6677
+ )
6678
+ end
6679
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
6680
+
6681
+ TWILIO =
6682
+ T.let(
6683
+ :twilio,
6684
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
6685
+ )
6686
+ VONAGE =
6687
+ T.let(
6688
+ :vonage,
6689
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
6690
+ )
6691
+
6692
+ sig do
6693
+ override.returns(
6694
+ T::Array[
6695
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
6696
+ ]
6697
+ )
6698
+ end
6699
+ def self.values
6700
+ end
6701
+ end
6702
+
5940
6703
  module Type
5941
6704
  extend Revox::Internal::Type::Enum
5942
6705
 
@@ -5977,6 +6740,176 @@ module Revox
5977
6740
  end
5978
6741
  end
5979
6742
 
6743
+ class SpeechEvent < Revox::Internal::Type::BaseModel
6744
+ OrHash =
6745
+ T.type_alias do
6746
+ T.any(
6747
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent,
6748
+ Revox::Internal::AnyHash
6749
+ )
6750
+ end
6751
+
6752
+ sig { returns(String) }
6753
+ attr_accessor :id
6754
+
6755
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
6756
+ sig { returns(T::Boolean) }
6757
+ attr_accessor :is_real_turn
6758
+
6759
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
6760
+ # system instructions plus conversation history — as JSON.
6761
+ sig { returns(T.nilable(String)) }
6762
+ attr_accessor :llm_system_prompt
6763
+
6764
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
6765
+ sig { returns(T.nilable(Float)) }
6766
+ attr_accessor :llm_ttft_ms
6767
+
6768
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
6769
+ # a race, which is also the model `llm_ttft_ms` describes.
6770
+ sig { returns(T.nilable(String)) }
6771
+ attr_accessor :llm_winner_model
6772
+
6773
+ # Who was speaking during this segment.
6774
+ sig do
6775
+ returns(
6776
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
6777
+ )
6778
+ end
6779
+ attr_accessor :speaker
6780
+
6781
+ # Milliseconds since session start when speech began.
6782
+ sig { returns(Float) }
6783
+ attr_accessor :started_speaking_at_ms
6784
+
6785
+ # Milliseconds since session start when speech ended. Null when the session ended
6786
+ # before the turn closed.
6787
+ sig { returns(T.nilable(Float)) }
6788
+ attr_accessor :stopped_speaking_at_ms
6789
+
6790
+ # User-only: time from end-of-speech to final transcript, in ms.
6791
+ sig { returns(T.nilable(Float)) }
6792
+ attr_accessor :stt_transcription_delay_ms
6793
+
6794
+ # Recognized text for this segment, when available.
6795
+ sig { returns(T.nilable(String)) }
6796
+ attr_accessor :transcript
6797
+
6798
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
6799
+ sig { returns(T.nilable(Float)) }
6800
+ attr_accessor :tts_ttfb_ms
6801
+
6802
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
6803
+ # Null on user segments.
6804
+ sig { returns(T.nilable(T::Boolean)) }
6805
+ attr_accessor :was_cut
6806
+
6807
+ sig do
6808
+ params(
6809
+ id: String,
6810
+ is_real_turn: T::Boolean,
6811
+ llm_system_prompt: T.nilable(String),
6812
+ llm_ttft_ms: T.nilable(Float),
6813
+ llm_winner_model: T.nilable(String),
6814
+ speaker:
6815
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker::OrSymbol,
6816
+ started_speaking_at_ms: Float,
6817
+ stopped_speaking_at_ms: T.nilable(Float),
6818
+ stt_transcription_delay_ms: T.nilable(Float),
6819
+ transcript: T.nilable(String),
6820
+ tts_ttfb_ms: T.nilable(Float),
6821
+ was_cut: T.nilable(T::Boolean)
6822
+ ).returns(T.attached_class)
6823
+ end
6824
+ def self.new(
6825
+ id:,
6826
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
6827
+ is_real_turn:,
6828
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
6829
+ # system instructions plus conversation history — as JSON.
6830
+ llm_system_prompt:,
6831
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
6832
+ llm_ttft_ms:,
6833
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
6834
+ # a race, which is also the model `llm_ttft_ms` describes.
6835
+ llm_winner_model:,
6836
+ # Who was speaking during this segment.
6837
+ speaker:,
6838
+ # Milliseconds since session start when speech began.
6839
+ started_speaking_at_ms:,
6840
+ # Milliseconds since session start when speech ended. Null when the session ended
6841
+ # before the turn closed.
6842
+ stopped_speaking_at_ms:,
6843
+ # User-only: time from end-of-speech to final transcript, in ms.
6844
+ stt_transcription_delay_ms:,
6845
+ # Recognized text for this segment, when available.
6846
+ transcript:,
6847
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
6848
+ tts_ttfb_ms:,
6849
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
6850
+ # Null on user segments.
6851
+ was_cut:
6852
+ )
6853
+ end
6854
+
6855
+ sig do
6856
+ override.returns(
6857
+ {
6858
+ id: String,
6859
+ is_real_turn: T::Boolean,
6860
+ llm_system_prompt: T.nilable(String),
6861
+ llm_ttft_ms: T.nilable(Float),
6862
+ llm_winner_model: T.nilable(String),
6863
+ speaker:
6864
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol,
6865
+ started_speaking_at_ms: Float,
6866
+ stopped_speaking_at_ms: T.nilable(Float),
6867
+ stt_transcription_delay_ms: T.nilable(Float),
6868
+ transcript: T.nilable(String),
6869
+ tts_ttfb_ms: T.nilable(Float),
6870
+ was_cut: T.nilable(T::Boolean)
6871
+ }
6872
+ )
6873
+ end
6874
+ def to_hash
6875
+ end
6876
+
6877
+ # Who was speaking during this segment.
6878
+ module Speaker
6879
+ extend Revox::Internal::Type::Enum
6880
+
6881
+ TaggedSymbol =
6882
+ T.type_alias do
6883
+ T.all(
6884
+ Symbol,
6885
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker
6886
+ )
6887
+ end
6888
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
6889
+
6890
+ USER =
6891
+ T.let(
6892
+ :user,
6893
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
6894
+ )
6895
+ AGENT =
6896
+ T.let(
6897
+ :agent,
6898
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
6899
+ )
6900
+
6901
+ sig do
6902
+ override.returns(
6903
+ T::Array[
6904
+ Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
6905
+ ]
6906
+ )
6907
+ end
6908
+ def self.values
6909
+ end
6910
+ end
6911
+ end
6912
+
5980
6913
  class Transcript < Revox::Internal::Type::BaseModel
5981
6914
  OrHash =
5982
6915
  T.type_alias do
@@ -6482,6 +7415,11 @@ module Revox
6482
7415
  :post_processing,
6483
7416
  Revox::Models::CallCreateResponse::Call::Status::TaggedSymbol
6484
7417
  )
7418
+ NOT_LAUNCHED =
7419
+ T.let(
7420
+ :not_launched,
7421
+ Revox::Models::CallCreateResponse::Call::Status::TaggedSymbol
7422
+ )
6485
7423
  SCHEDULED =
6486
7424
  T.let(
6487
7425
  :scheduled,
@@ -6549,21 +7487,6 @@ module Revox
6549
7487
  :requested_callback_later,
6550
7488
  Revox::Models::CallCreateResponse::Call::Outcome::TaggedSymbol
6551
7489
  )
6552
- REQUESTED_CALLBACK_NEW_NUMBER =
6553
- T.let(
6554
- :requested_callback_new_number,
6555
- Revox::Models::CallCreateResponse::Call::Outcome::TaggedSymbol
6556
- )
6557
- DO_NOT_CONTACT =
6558
- T.let(
6559
- :do_not_contact,
6560
- Revox::Models::CallCreateResponse::Call::Outcome::TaggedSymbol
6561
- )
6562
- AI_AVERSE =
6563
- T.let(
6564
- :ai_averse,
6565
- Revox::Models::CallCreateResponse::Call::Outcome::TaggedSymbol
6566
- )
6567
7490
 
6568
7491
  sig do
6569
7492
  override.returns(