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
@@ -237,6 +237,12 @@ module Revox
237
237
  sig { returns(T.anything) }
238
238
  attr_accessor :updated_at
239
239
 
240
+ # Extra notification recipients resolved from the agent prompt's own routing
241
+ # rules, when it defines any. Added to the assistant's configured notification
242
+ # recipients; never replaces them. Null when the prompt defines no routing rules.
243
+ sig { returns(T.nilable(T::Array[String])) }
244
+ attr_accessor :follow_up_emails
245
+
240
246
  # Business outcome of the call. Null if not computed or no transcript.
241
247
  sig do
242
248
  returns(
@@ -251,6 +257,13 @@ module Revox
251
257
  sig { returns(T.nilable(String)) }
252
258
  attr_accessor :outcome_summary
253
259
 
260
+ # Slack channels resolved from the agent prompt's own routing rules, when it
261
+ # defines any. Always a subset of the channels configured on the assistant. Null
262
+ # when the prompt defines no routing rules, in which case every configured channel
263
+ # is notified.
264
+ sig { returns(T.nilable(T::Array[String])) }
265
+ attr_accessor :slack_channel_ids
266
+
254
267
  # This represent a call "order" that was requested by the user. A call order can
255
268
  # be resolved over multiple call attempts spanning up to a few days.
256
269
  sig do
@@ -303,11 +316,13 @@ module Revox
303
316
  status: Revox::Models::CallRetrieveResponse::Call::Status::OrSymbol,
304
317
  to_phone_number: String,
305
318
  updated_at: T.anything,
319
+ follow_up_emails: T.nilable(T::Array[String]),
306
320
  outcome:
307
321
  T.nilable(
308
322
  Revox::Models::CallRetrieveResponse::Call::Outcome::OrSymbol
309
323
  ),
310
- outcome_summary: T.nilable(String)
324
+ outcome_summary: T.nilable(String),
325
+ slack_channel_ids: T.nilable(T::Array[String])
311
326
  ).returns(T.attached_class)
312
327
  end
313
328
  def self.new(
@@ -362,10 +377,19 @@ module Revox
362
377
  # The time the call order was last updated (any state change, retry, or analysis
363
378
  # result).
364
379
  updated_at:,
380
+ # Extra notification recipients resolved from the agent prompt's own routing
381
+ # rules, when it defines any. Added to the assistant's configured notification
382
+ # recipients; never replaces them. Null when the prompt defines no routing rules.
383
+ follow_up_emails: nil,
365
384
  # Business outcome of the call. Null if not computed or no transcript.
366
385
  outcome: nil,
367
386
  # LLM explanation for the outcome, when outcome was computed from the transcript.
368
- outcome_summary: nil
387
+ outcome_summary: nil,
388
+ # Slack channels resolved from the agent prompt's own routing rules, when it
389
+ # defines any. Always a subset of the channels configured on the assistant. Null
390
+ # when the prompt defines no routing rules, in which case every configured channel
391
+ # is notified.
392
+ slack_channel_ids: nil
369
393
  )
370
394
  end
371
395
 
@@ -410,11 +434,13 @@ module Revox
410
434
  Revox::Models::CallRetrieveResponse::Call::Status::TaggedSymbol,
411
435
  to_phone_number: String,
412
436
  updated_at: T.anything,
437
+ follow_up_emails: T.nilable(T::Array[String]),
413
438
  outcome:
414
439
  T.nilable(
415
440
  Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
416
441
  ),
417
- outcome_summary: T.nilable(String)
442
+ outcome_summary: T.nilable(String),
443
+ slack_channel_ids: T.nilable(T::Array[String])
418
444
  }
419
445
  )
420
446
  end
@@ -583,14 +609,6 @@ module Revox
583
609
  sig { returns(T.nilable(String)) }
584
610
  attr_accessor :email_notification_address
585
611
 
586
- # The language used for the notification email content. One of "en" or "fr".
587
- sig do
588
- returns(
589
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
590
- )
591
- end
592
- attr_accessor :email_notification_language
593
-
594
612
  # Which call outcomes trigger an email notification. E.g. ["interested",
595
613
  # "completed", "none"]. Use "none" when outcome is null.
596
614
  sig do
@@ -626,8 +644,8 @@ module Revox
626
644
  sig { returns(T.nilable(String)) }
627
645
  attr_accessor :from_phone_number
628
646
 
629
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
630
- # not configured.
647
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
648
+ # transfer is not configured.
631
649
  sig do
632
650
  returns(
633
651
  T.nilable(
@@ -690,6 +708,11 @@ module Revox
690
708
  end
691
709
  attr_writer :position
692
710
 
711
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
712
+ # variables. Null when no lookup is configured.
713
+ sig { returns(T.nilable(String)) }
714
+ attr_accessor :precall_lookup_url
715
+
693
716
  sig { returns(String) }
694
717
  attr_accessor :prompt
695
718
 
@@ -811,9 +834,18 @@ module Revox
811
834
  sig { returns(Float) }
812
835
  attr_accessor :thinking_sound_volume
813
836
 
814
- # Phone number to transfer calls to when users request to speak to a human agent.
815
- sig { returns(T.nilable(String)) }
816
- attr_accessor :transfer_phone_number
837
+ # Where calls can be transferred to when users ask to speak to a human. Null or
838
+ # empty when transfer is not configured.
839
+ sig do
840
+ returns(
841
+ T.nilable(
842
+ T::Array[
843
+ Revox::Models::CallRetrieveResponse::Call::Assistant::TransferDestination
844
+ ]
845
+ )
846
+ )
847
+ end
848
+ attr_accessor :transfer_destinations
817
849
 
818
850
  sig do
819
851
  returns(
@@ -923,6 +955,12 @@ module Revox
923
955
  end
924
956
  attr_writer :faq_items
925
957
 
958
+ sig { returns(T.nilable(T::Boolean)) }
959
+ attr_reader :is_inbound_receptionist
960
+
961
+ sig { params(is_inbound_receptionist: T::Boolean).void }
962
+ attr_writer :is_inbound_receptionist
963
+
926
964
  sig { returns(T.nilable(T::Boolean)) }
927
965
  attr_reader :is_realestate_assistant
928
966
 
@@ -967,8 +1005,6 @@ module Revox
967
1005
  ]
968
1006
  ),
969
1007
  email_notification_address: T.nilable(String),
970
- email_notification_language:
971
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::OrSymbol,
972
1008
  email_notification_outcomes:
973
1009
  T.nilable(
974
1010
  T::Array[
@@ -1002,6 +1038,7 @@ module Revox
1002
1038
  T.nilable(
1003
1039
  Revox::Models::CallRetrieveResponse::Call::Assistant::Position::OrHash
1004
1040
  ),
1041
+ precall_lookup_url: T.nilable(String),
1005
1042
  prompt: String,
1006
1043
  prompt_flow:
1007
1044
  T.nilable(
@@ -1032,7 +1069,12 @@ module Revox
1032
1069
  ),
1033
1070
  thinking_sound_probability: Float,
1034
1071
  thinking_sound_volume: Float,
1035
- transfer_phone_number: T.nilable(String),
1072
+ transfer_destinations:
1073
+ T.nilable(
1074
+ T::Array[
1075
+ Revox::Models::CallRetrieveResponse::Call::Assistant::TransferDestination::OrHash
1076
+ ]
1077
+ ),
1036
1078
  type:
1037
1079
  Revox::Models::CallRetrieveResponse::Call::Assistant::Type::OrSymbol,
1038
1080
  updated_at: T.anything,
@@ -1056,6 +1098,7 @@ module Revox
1056
1098
  T::Array[
1057
1099
  Revox::Models::CallRetrieveResponse::Call::Assistant::FaqItem::OrHash
1058
1100
  ],
1101
+ is_inbound_receptionist: T::Boolean,
1059
1102
  is_realestate_assistant: T::Boolean,
1060
1103
  pending_faq_count: Float
1061
1104
  ).returns(T.attached_class)
@@ -1084,8 +1127,6 @@ module Revox
1084
1127
  # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
1085
1128
  # bob@y.com").
1086
1129
  email_notification_address:,
1087
- # The language used for the notification email content. One of "en" or "fr".
1088
- email_notification_language:,
1089
1130
  # Which call outcomes trigger an email notification. E.g. ["interested",
1090
1131
  # "completed", "none"]. Use "none" when outcome is null.
1091
1132
  email_notification_outcomes:,
@@ -1097,8 +1138,8 @@ module Revox
1097
1138
  # Override the default outbound phone number for calls placed with this assistant.
1098
1139
  # When null, the organization's default phone number is used.
1099
1140
  from_phone_number:,
1100
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1101
- # not configured.
1141
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
1142
+ # transfer is not configured.
1102
1143
  human_transfer_mode:,
1103
1144
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
1104
1145
  # skip turns to navigate phone menus.
@@ -1117,6 +1158,9 @@ module Revox
1117
1158
  name:,
1118
1159
  organization_id:,
1119
1160
  position:,
1161
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
1162
+ # variables. Null when no lookup is configured.
1163
+ precall_lookup_url:,
1120
1164
  prompt:,
1121
1165
  prompt_flow:,
1122
1166
  slack:,
@@ -1148,8 +1192,9 @@ module Revox
1148
1192
  thinking_sound_probability:,
1149
1193
  # Volume of the thinking sound (0 = silent, 1 = max).
1150
1194
  thinking_sound_volume:,
1151
- # Phone number to transfer calls to when users request to speak to a human agent.
1152
- transfer_phone_number:,
1195
+ # Where calls can be transferred to when users ask to speak to a human. Null or
1196
+ # empty when transfer is not configured.
1197
+ transfer_destinations:,
1153
1198
  type:,
1154
1199
  updated_at:,
1155
1200
  voice:,
@@ -1168,6 +1213,7 @@ module Revox
1168
1213
  # The user who created the assistant.
1169
1214
  created_by: nil,
1170
1215
  faq_items: nil,
1216
+ is_inbound_receptionist: nil,
1171
1217
  is_realestate_assistant: nil,
1172
1218
  pending_faq_count: nil
1173
1219
  )
@@ -1206,8 +1252,6 @@ module Revox
1206
1252
  ]
1207
1253
  ),
1208
1254
  email_notification_address: T.nilable(String),
1209
- email_notification_language:
1210
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol,
1211
1255
  email_notification_outcomes:
1212
1256
  T.nilable(
1213
1257
  T::Array[
@@ -1236,6 +1280,7 @@ module Revox
1236
1280
  T.nilable(
1237
1281
  Revox::Models::CallRetrieveResponse::Call::Assistant::Position
1238
1282
  ),
1283
+ precall_lookup_url: T.nilable(String),
1239
1284
  prompt: String,
1240
1285
  prompt_flow:
1241
1286
  T.nilable(
@@ -1266,7 +1311,12 @@ module Revox
1266
1311
  ),
1267
1312
  thinking_sound_probability: Float,
1268
1313
  thinking_sound_volume: Float,
1269
- transfer_phone_number: T.nilable(String),
1314
+ transfer_destinations:
1315
+ T.nilable(
1316
+ T::Array[
1317
+ Revox::Models::CallRetrieveResponse::Call::Assistant::TransferDestination
1318
+ ]
1319
+ ),
1270
1320
  type:
1271
1321
  Revox::Models::CallRetrieveResponse::Call::Assistant::Type::TaggedSymbol,
1272
1322
  updated_at: T.anything,
@@ -1290,6 +1340,7 @@ module Revox
1290
1340
  T::Array[
1291
1341
  Revox::Models::CallRetrieveResponse::Call::Assistant::FaqItem
1292
1342
  ],
1343
+ is_inbound_receptionist: T::Boolean,
1293
1344
  is_realestate_assistant: T::Boolean,
1294
1345
  pending_faq_count: Float
1295
1346
  }
@@ -1330,21 +1381,6 @@ module Revox
1330
1381
  :requested_callback_later,
1331
1382
  Revox::Models::CallRetrieveResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
1332
1383
  )
1333
- REQUESTED_CALLBACK_NEW_NUMBER =
1334
- T.let(
1335
- :requested_callback_new_number,
1336
- Revox::Models::CallRetrieveResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
1337
- )
1338
- DO_NOT_CONTACT =
1339
- T.let(
1340
- :do_not_contact,
1341
- Revox::Models::CallRetrieveResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
1342
- )
1343
- AI_AVERSE =
1344
- T.let(
1345
- :ai_averse,
1346
- Revox::Models::CallRetrieveResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
1347
- )
1348
1384
  NONE =
1349
1385
  T.let(
1350
1386
  :none,
@@ -1613,7 +1649,8 @@ module Revox
1613
1649
  sig { returns(String) }
1614
1650
  attr_accessor :calling_window_start_time
1615
1651
 
1616
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1652
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1653
+ # allows. Default: 7200 (2 hours).
1617
1654
  sig { returns(Integer) }
1618
1655
  attr_accessor :retry_delay_seconds
1619
1656
 
@@ -1633,7 +1670,8 @@ module Revox
1633
1670
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1634
1671
  # Examples: '09:00', '10am'. Default: '10:00'.
1635
1672
  calling_window_start_time:,
1636
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1673
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1674
+ # allows. Default: 7200 (2 hours).
1637
1675
  retry_delay_seconds:
1638
1676
  )
1639
1677
  end
@@ -2020,41 +2058,6 @@ module Revox
2020
2058
  end
2021
2059
  end
2022
2060
 
2023
- # The language used for the notification email content. One of "en" or "fr".
2024
- module EmailNotificationLanguage
2025
- extend Revox::Internal::Type::Enum
2026
-
2027
- TaggedSymbol =
2028
- T.type_alias do
2029
- T.all(
2030
- Symbol,
2031
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage
2032
- )
2033
- end
2034
- OrSymbol = T.type_alias { T.any(Symbol, String) }
2035
-
2036
- EN =
2037
- T.let(
2038
- :en,
2039
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
2040
- )
2041
- FR =
2042
- T.let(
2043
- :fr,
2044
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
2045
- )
2046
-
2047
- sig do
2048
- override.returns(
2049
- T::Array[
2050
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
2051
- ]
2052
- )
2053
- end
2054
- def self.values
2055
- end
2056
- end
2057
-
2058
2061
  module EmailNotificationOutcome
2059
2062
  extend Revox::Internal::Type::Enum
2060
2063
 
@@ -2087,21 +2090,6 @@ module Revox
2087
2090
  :requested_callback_later,
2088
2091
  Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
2089
2092
  )
2090
- REQUESTED_CALLBACK_NEW_NUMBER =
2091
- T.let(
2092
- :requested_callback_new_number,
2093
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
2094
- )
2095
- DO_NOT_CONTACT =
2096
- T.let(
2097
- :do_not_contact,
2098
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
2099
- )
2100
- AI_AVERSE =
2101
- T.let(
2102
- :ai_averse,
2103
- Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
2104
- )
2105
2093
  NONE =
2106
2094
  T.let(
2107
2095
  :none,
@@ -2158,8 +2146,8 @@ module Revox
2158
2146
  end
2159
2147
  end
2160
2148
 
2161
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
2162
- # not configured.
2149
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
2150
+ # transfer is not configured.
2163
2151
  module HumanTransferMode
2164
2152
  extend Revox::Internal::Type::Enum
2165
2153
 
@@ -2757,9 +2745,17 @@ module Revox
2757
2745
  )
2758
2746
  end
2759
2747
 
2760
- # The Slack channel ID where the notification will be posted.
2761
- sig { returns(String) }
2762
- attr_accessor :channel_id
2748
+ # The Slack channels eligible to receive the notification. When more than one is
2749
+ # configured, the agent prompt may define routing rules to narrow it down per
2750
+ # call; with no such rules every channel here is notified.
2751
+ sig do
2752
+ returns(
2753
+ T::Array[
2754
+ Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Channel
2755
+ ]
2756
+ )
2757
+ end
2758
+ attr_accessor :channels
2763
2759
 
2764
2760
  # The Nango connection ID linking the org's Slack workspace to Revox.
2765
2761
  sig { returns(String) }
@@ -2776,45 +2772,43 @@ module Revox
2776
2772
  end
2777
2773
  attr_accessor :outcomes
2778
2774
 
2779
- # Human-readable Slack channel name, cached for display in the UI.
2780
- sig { returns(T.nilable(String)) }
2781
- attr_accessor :channel_name
2782
-
2783
2775
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2784
2776
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2785
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2786
- # prompt_variables and structured_output keys. When null/empty a default template
2787
- # is used.
2777
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2778
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2779
+ # null/empty a default template is used.
2788
2780
  sig { returns(T.nilable(String)) }
2789
2781
  attr_accessor :template
2790
2782
 
2791
2783
  sig do
2792
2784
  params(
2793
- channel_id: String,
2785
+ channels:
2786
+ T::Array[
2787
+ Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Channel::OrHash
2788
+ ],
2794
2789
  connection_id: String,
2795
2790
  outcomes:
2796
2791
  T::Array[
2797
2792
  Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::OrSymbol
2798
2793
  ],
2799
- channel_name: T.nilable(String),
2800
2794
  template: T.nilable(String)
2801
2795
  ).returns(T.attached_class)
2802
2796
  end
2803
2797
  def self.new(
2804
- # The Slack channel ID where the notification will be posted.
2805
- channel_id:,
2798
+ # The Slack channels eligible to receive the notification. When more than one is
2799
+ # configured, the agent prompt may define routing rules to narrow it down per
2800
+ # call; with no such rules every channel here is notified.
2801
+ channels:,
2806
2802
  # The Nango connection ID linking the org's Slack workspace to Revox.
2807
2803
  connection_id:,
2808
2804
  # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2809
2805
  # Use 'none' to notify when outcome is null.
2810
2806
  outcomes:,
2811
- # Human-readable Slack channel name, cached for display in the UI.
2812
- channel_name: nil,
2813
2807
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2814
2808
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2815
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2816
- # prompt_variables and structured_output keys. When null/empty a default template
2817
- # is used.
2809
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2810
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2811
+ # null/empty a default template is used.
2818
2812
  template: nil
2819
2813
  )
2820
2814
  end
@@ -2822,13 +2816,15 @@ module Revox
2822
2816
  sig do
2823
2817
  override.returns(
2824
2818
  {
2825
- channel_id: String,
2819
+ channels:
2820
+ T::Array[
2821
+ Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Channel
2822
+ ],
2826
2823
  connection_id: String,
2827
2824
  outcomes:
2828
2825
  T::Array[
2829
2826
  Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2830
2827
  ],
2831
- channel_name: T.nilable(String),
2832
2828
  template: T.nilable(String)
2833
2829
  }
2834
2830
  )
@@ -2836,6 +2832,43 @@ module Revox
2836
2832
  def to_hash
2837
2833
  end
2838
2834
 
2835
+ class Channel < Revox::Internal::Type::BaseModel
2836
+ OrHash =
2837
+ T.type_alias do
2838
+ T.any(
2839
+ Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Channel,
2840
+ Revox::Internal::AnyHash
2841
+ )
2842
+ end
2843
+
2844
+ # The Slack channel ID (e.g. 'C01234567').
2845
+ sig { returns(String) }
2846
+ attr_accessor :id
2847
+
2848
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2849
+ # LLM when the agent prompt routes by channel name.
2850
+ sig { returns(T.nilable(String)) }
2851
+ attr_accessor :name
2852
+
2853
+ sig do
2854
+ params(id: String, name: T.nilable(String)).returns(
2855
+ T.attached_class
2856
+ )
2857
+ end
2858
+ def self.new(
2859
+ # The Slack channel ID (e.g. 'C01234567').
2860
+ id:,
2861
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2862
+ # LLM when the agent prompt routes by channel name.
2863
+ name: nil
2864
+ )
2865
+ end
2866
+
2867
+ sig { override.returns({ id: String, name: T.nilable(String) }) }
2868
+ def to_hash
2869
+ end
2870
+ end
2871
+
2839
2872
  module Outcome
2840
2873
  extend Revox::Internal::Type::Enum
2841
2874
 
@@ -2868,21 +2901,6 @@ module Revox
2868
2901
  :requested_callback_later,
2869
2902
  Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2870
2903
  )
2871
- REQUESTED_CALLBACK_NEW_NUMBER =
2872
- T.let(
2873
- :requested_callback_new_number,
2874
- Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2875
- )
2876
- DO_NOT_CONTACT =
2877
- T.let(
2878
- :do_not_contact,
2879
- Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2880
- )
2881
- AI_AVERSE =
2882
- T.let(
2883
- :ai_averse,
2884
- Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
2885
- )
2886
2904
  NONE =
2887
2905
  T.let(
2888
2906
  :none,
@@ -3197,6 +3215,34 @@ module Revox
3197
3215
  end
3198
3216
  end
3199
3217
 
3218
+ class TransferDestination < Revox::Internal::Type::BaseModel
3219
+ OrHash =
3220
+ T.type_alias do
3221
+ T.any(
3222
+ Revox::Models::CallRetrieveResponse::Call::Assistant::TransferDestination,
3223
+ Revox::Internal::AnyHash
3224
+ )
3225
+ end
3226
+
3227
+ sig { returns(String) }
3228
+ attr_accessor :label
3229
+
3230
+ sig { returns(String) }
3231
+ attr_accessor :phone_number
3232
+
3233
+ sig do
3234
+ params(label: String, phone_number: String).returns(
3235
+ T.attached_class
3236
+ )
3237
+ end
3238
+ def self.new(label:, phone_number:)
3239
+ end
3240
+
3241
+ sig { override.returns({ label: String, phone_number: String }) }
3242
+ def to_hash
3243
+ end
3244
+ end
3245
+
3200
3246
  module Type
3201
3247
  extend Revox::Internal::Type::Enum
3202
3248
 
@@ -3277,7 +3323,7 @@ module Revox
3277
3323
  attr_writer :model
3278
3324
 
3279
3325
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3280
- # 0.7–1.2. Default is 1.0.
3326
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3281
3327
  sig { returns(T.nilable(Float)) }
3282
3328
  attr_reader :speed
3283
3329
 
@@ -3312,7 +3358,7 @@ module Revox
3312
3358
  # for other providers.
3313
3359
  model: nil,
3314
3360
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3315
- # 0.7–1.2. Default is 1.0.
3361
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3316
3362
  speed: nil,
3317
3363
  # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
3318
3364
  # providers.
@@ -3359,6 +3405,11 @@ module Revox
3359
3405
  :elevenlabs,
3360
3406
  Revox::Models::CallRetrieveResponse::Call::Assistant::Voice::Provider::TaggedSymbol
3361
3407
  )
3408
+ GRADIUM =
3409
+ T.let(
3410
+ :gradium,
3411
+ Revox::Models::CallRetrieveResponse::Call::Assistant::Voice::Provider::TaggedSymbol
3412
+ )
3362
3413
 
3363
3414
  sig do
3364
3415
  override.returns(
@@ -3589,21 +3640,6 @@ module Revox
3589
3640
  :requested_callback_later,
3590
3641
  Revox::Models::CallRetrieveResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
3591
3642
  )
3592
- REQUESTED_CALLBACK_NEW_NUMBER =
3593
- T.let(
3594
- :requested_callback_new_number,
3595
- Revox::Models::CallRetrieveResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
3596
- )
3597
- DO_NOT_CONTACT =
3598
- T.let(
3599
- :do_not_contact,
3600
- Revox::Models::CallRetrieveResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
3601
- )
3602
- AI_AVERSE =
3603
- T.let(
3604
- :ai_averse,
3605
- Revox::Models::CallRetrieveResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
3606
- )
3607
3643
  NONE =
3608
3644
  T.let(
3609
3645
  :none,
@@ -3821,6 +3857,37 @@ module Revox
3821
3857
  sig { returns(T.anything) }
3822
3858
  attr_accessor :ended_at
3823
3859
 
3860
+ # Whether the AI agent conducted the conversation on this attempt. False for a
3861
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
3862
+ # were never answered.
3863
+ sig { returns(T::Boolean) }
3864
+ attr_accessor :handled_by_ai
3865
+
3866
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
3867
+ # or a speed-dial operator connection (both stamp human_takeover_at).
3868
+ sig { returns(T::Boolean) }
3869
+ attr_accessor :handled_by_human
3870
+
3871
+ # The team member responsible for following up on this call.
3872
+ sig do
3873
+ returns(
3874
+ T.nilable(
3875
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser
3876
+ )
3877
+ )
3878
+ end
3879
+ attr_reader :handled_by_user
3880
+
3881
+ sig do
3882
+ params(
3883
+ handled_by_user:
3884
+ T.nilable(
3885
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser::OrHash
3886
+ )
3887
+ ).void
3888
+ end
3889
+ attr_writer :handled_by_user
3890
+
3824
3891
  # The phone number that was called. Formatted in E.164 format. Example:
3825
3892
  # +1234567890
3826
3893
  sig { returns(String) }
@@ -3855,6 +3922,19 @@ module Revox
3855
3922
  sig { returns(T.nilable(T::Array[String])) }
3856
3923
  attr_accessor :assistants_used
3857
3924
 
3925
+ # Notification emails sent in connection with the call, ordered oldest first
3926
+ # (from/to addresses, subject, sent time).
3927
+ sig do
3928
+ returns(
3929
+ T.nilable(
3930
+ T::Array[
3931
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::EmailLog
3932
+ ]
3933
+ )
3934
+ )
3935
+ end
3936
+ attr_accessor :email_log
3937
+
3858
3938
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
3859
3939
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
3860
3940
  sig do
@@ -3904,6 +3984,20 @@ module Revox
3904
3984
  end
3905
3985
  attr_accessor :sms_log
3906
3986
 
3987
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
3988
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
3989
+ # tracked or for realtime sessions that don't emit them.
3990
+ sig do
3991
+ returns(
3992
+ T.nilable(
3993
+ T::Array[
3994
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent
3995
+ ]
3996
+ )
3997
+ )
3998
+ end
3999
+ attr_accessor :speech_events
4000
+
3907
4001
  # The data extracted from the call, using the structured output config from the
3908
4002
  # parent call object.
3909
4003
  sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
@@ -3932,6 +4026,12 @@ module Revox
3932
4026
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::DialError::OrSymbol
3933
4027
  ),
3934
4028
  ended_at: T.anything,
4029
+ handled_by_ai: T::Boolean,
4030
+ handled_by_human: T::Boolean,
4031
+ handled_by_user:
4032
+ T.nilable(
4033
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser::OrHash
4034
+ ),
3935
4035
  phone_number: String,
3936
4036
  recording_url: T.nilable(String),
3937
4037
  result:
@@ -3942,6 +4042,12 @@ module Revox
3942
4042
  status:
3943
4043
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::Status::OrSymbol,
3944
4044
  assistants_used: T.nilable(T::Array[String]),
4045
+ email_log:
4046
+ T.nilable(
4047
+ T::Array[
4048
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::EmailLog::OrHash
4049
+ ]
4050
+ ),
3945
4051
  end_reason:
3946
4052
  T.nilable(
3947
4053
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::EndReason::OrSymbol
@@ -3962,6 +4068,12 @@ module Revox
3962
4068
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::OrHash
3963
4069
  ]
3964
4070
  ),
4071
+ speech_events:
4072
+ T.nilable(
4073
+ T::Array[
4074
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::OrHash
4075
+ ]
4076
+ ),
3965
4077
  structured_output: T.nilable(T::Hash[Symbol, T.anything]),
3966
4078
  transcript:
3967
4079
  T.nilable(
@@ -3980,6 +4092,15 @@ module Revox
3980
4092
  dial_error:,
3981
4093
  # The time the call ended.
3982
4094
  ended_at:,
4095
+ # Whether the AI agent conducted the conversation on this attempt. False for a
4096
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
4097
+ # were never answered.
4098
+ handled_by_ai:,
4099
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
4100
+ # or a speed-dial operator connection (both stamp human_takeover_at).
4101
+ handled_by_human:,
4102
+ # The team member responsible for following up on this call.
4103
+ handled_by_user:,
3983
4104
  # The phone number that was called. Formatted in E.164 format. Example:
3984
4105
  # +1234567890
3985
4106
  phone_number:,
@@ -3992,6 +4113,9 @@ module Revox
3992
4113
  status:,
3993
4114
  # Assistant node ids entered during this attempt, in traversal order.
3994
4115
  assistants_used: nil,
4116
+ # Notification emails sent in connection with the call, ordered oldest first
4117
+ # (from/to addresses, subject, sent time).
4118
+ email_log: nil,
3995
4119
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
3996
4120
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
3997
4121
  end_reason: nil,
@@ -4005,6 +4129,10 @@ module Revox
4005
4129
  # first. The in-call `send_sms` is excluded — it already appears in the transcript
4006
4130
  # as a tool call.
4007
4131
  sms_log: nil,
4132
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
4133
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
4134
+ # tracked or for realtime sessions that don't emit them.
4135
+ speech_events: nil,
4008
4136
  # The data extracted from the call, using the structured output config from the
4009
4137
  # parent call object.
4010
4138
  structured_output: nil,
@@ -4023,6 +4151,12 @@ module Revox
4023
4151
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::DialError::TaggedSymbol
4024
4152
  ),
4025
4153
  ended_at: T.anything,
4154
+ handled_by_ai: T::Boolean,
4155
+ handled_by_human: T::Boolean,
4156
+ handled_by_user:
4157
+ T.nilable(
4158
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser
4159
+ ),
4026
4160
  phone_number: String,
4027
4161
  recording_url: T.nilable(String),
4028
4162
  result:
@@ -4033,6 +4167,12 @@ module Revox
4033
4167
  status:
4034
4168
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::Status::TaggedSymbol,
4035
4169
  assistants_used: T.nilable(T::Array[String]),
4170
+ email_log:
4171
+ T.nilable(
4172
+ T::Array[
4173
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::EmailLog
4174
+ ]
4175
+ ),
4036
4176
  end_reason:
4037
4177
  T.nilable(
4038
4178
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::EndReason::TaggedSymbol
@@ -4053,6 +4193,12 @@ module Revox
4053
4193
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog
4054
4194
  ]
4055
4195
  ),
4196
+ speech_events:
4197
+ T.nilable(
4198
+ T::Array[
4199
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent
4200
+ ]
4201
+ ),
4056
4202
  structured_output: T.nilable(T::Hash[Symbol, T.anything]),
4057
4203
  transcript:
4058
4204
  T.nilable(
@@ -4131,52 +4277,106 @@ module Revox
4131
4277
  end
4132
4278
  end
4133
4279
 
4134
- module Result
4135
- extend Revox::Internal::Type::Enum
4136
-
4137
- TaggedSymbol =
4280
+ class HandledByUser < Revox::Internal::Type::BaseModel
4281
+ OrHash =
4138
4282
  T.type_alias do
4139
- T.all(
4140
- Symbol,
4141
- Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result
4283
+ T.any(
4284
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser,
4285
+ Revox::Internal::AnyHash
4142
4286
  )
4143
4287
  end
4144
- OrSymbol = T.type_alias { T.any(Symbol, String) }
4145
4288
 
4146
- IVR =
4147
- T.let(
4148
- :IVR,
4149
- Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4150
- )
4151
- VOICEMAIL =
4152
- T.let(
4153
- :voicemail,
4154
- Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4155
- )
4156
- HUMAN =
4157
- T.let(
4158
- :human,
4159
- Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4160
- )
4161
- UNKNOWN =
4162
- T.let(
4163
- :unknown,
4164
- Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4165
- )
4166
- IOS_SCREENING_FILTER =
4167
- T.let(
4168
- :"ios-screening-filter",
4169
- Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4170
- )
4289
+ # The database user id of the assignee.
4290
+ sig { returns(String) }
4291
+ attr_accessor :id
4171
4292
 
4172
- sig do
4173
- override.returns(
4174
- T::Array[
4175
- Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4176
- ]
4177
- )
4178
- end
4179
- def self.values
4293
+ sig { returns(String) }
4294
+ attr_accessor :email
4295
+
4296
+ sig { returns(T.nilable(String)) }
4297
+ attr_accessor :first_name
4298
+
4299
+ sig { returns(T.nilable(String)) }
4300
+ attr_accessor :last_name
4301
+
4302
+ # The team member responsible for following up on this call.
4303
+ sig do
4304
+ params(
4305
+ id: String,
4306
+ email: String,
4307
+ first_name: T.nilable(String),
4308
+ last_name: T.nilable(String)
4309
+ ).returns(T.attached_class)
4310
+ end
4311
+ def self.new(
4312
+ # The database user id of the assignee.
4313
+ id:,
4314
+ email:,
4315
+ first_name:,
4316
+ last_name:
4317
+ )
4318
+ end
4319
+
4320
+ sig do
4321
+ override.returns(
4322
+ {
4323
+ id: String,
4324
+ email: String,
4325
+ first_name: T.nilable(String),
4326
+ last_name: T.nilable(String)
4327
+ }
4328
+ )
4329
+ end
4330
+ def to_hash
4331
+ end
4332
+ end
4333
+
4334
+ module Result
4335
+ extend Revox::Internal::Type::Enum
4336
+
4337
+ TaggedSymbol =
4338
+ T.type_alias do
4339
+ T.all(
4340
+ Symbol,
4341
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result
4342
+ )
4343
+ end
4344
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
4345
+
4346
+ IVR =
4347
+ T.let(
4348
+ :IVR,
4349
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4350
+ )
4351
+ VOICEMAIL =
4352
+ T.let(
4353
+ :voicemail,
4354
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4355
+ )
4356
+ HUMAN =
4357
+ T.let(
4358
+ :human,
4359
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4360
+ )
4361
+ UNKNOWN =
4362
+ T.let(
4363
+ :unknown,
4364
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4365
+ )
4366
+ IOS_SCREENING_FILTER =
4367
+ T.let(
4368
+ :"ios-screening-filter",
4369
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4370
+ )
4371
+
4372
+ sig do
4373
+ override.returns(
4374
+ T::Array[
4375
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
4376
+ ]
4377
+ )
4378
+ end
4379
+ def self.values
4180
4380
  end
4181
4381
  end
4182
4382
 
@@ -4230,6 +4430,71 @@ module Revox
4230
4430
  end
4231
4431
  end
4232
4432
 
4433
+ class EmailLog < Revox::Internal::Type::BaseModel
4434
+ OrHash =
4435
+ T.type_alias do
4436
+ T.any(
4437
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::EmailLog,
4438
+ Revox::Internal::AnyHash
4439
+ )
4440
+ end
4441
+
4442
+ sig { returns(String) }
4443
+ attr_accessor :id
4444
+
4445
+ # When the email was sent.
4446
+ sig { returns(T.anything) }
4447
+ attr_accessor :created_at
4448
+
4449
+ sig { returns(String) }
4450
+ attr_accessor :from_address
4451
+
4452
+ sig { returns(T.nilable(String)) }
4453
+ attr_accessor :resend_message_id
4454
+
4455
+ sig { returns(String) }
4456
+ attr_accessor :subject
4457
+
4458
+ sig { returns(T::Array[String]) }
4459
+ attr_accessor :to_emails
4460
+
4461
+ sig do
4462
+ params(
4463
+ id: String,
4464
+ created_at: T.anything,
4465
+ from_address: String,
4466
+ resend_message_id: T.nilable(String),
4467
+ subject: String,
4468
+ to_emails: T::Array[String]
4469
+ ).returns(T.attached_class)
4470
+ end
4471
+ def self.new(
4472
+ id:,
4473
+ # When the email was sent.
4474
+ created_at:,
4475
+ from_address:,
4476
+ resend_message_id:,
4477
+ subject:,
4478
+ to_emails:
4479
+ )
4480
+ end
4481
+
4482
+ sig do
4483
+ override.returns(
4484
+ {
4485
+ id: String,
4486
+ created_at: T.anything,
4487
+ from_address: String,
4488
+ resend_message_id: T.nilable(String),
4489
+ subject: String,
4490
+ to_emails: T::Array[String]
4491
+ }
4492
+ )
4493
+ end
4494
+ def to_hash
4495
+ end
4496
+ end
4497
+
4233
4498
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
4234
4499
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
4235
4500
  module EndReason
@@ -4557,11 +4822,18 @@ module Revox
4557
4822
  sig { returns(String) }
4558
4823
  attr_accessor :message_body
4559
4824
 
4560
- sig { returns(String) }
4561
- attr_accessor :to_phone_number
4825
+ sig do
4826
+ returns(
4827
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
4828
+ )
4829
+ end
4830
+ attr_accessor :provider
4562
4831
 
4563
4832
  sig { returns(T.nilable(String)) }
4564
- attr_accessor :twilio_message_sid
4833
+ attr_accessor :provider_message_id
4834
+
4835
+ sig { returns(String) }
4836
+ attr_accessor :to_phone_number
4565
4837
 
4566
4838
  sig do
4567
4839
  returns(
@@ -4575,8 +4847,10 @@ module Revox
4575
4847
  id: String,
4576
4848
  created_at: T.anything,
4577
4849
  message_body: String,
4850
+ provider:
4851
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::OrSymbol,
4852
+ provider_message_id: T.nilable(String),
4578
4853
  to_phone_number: String,
4579
- twilio_message_sid: T.nilable(String),
4580
4854
  type:
4581
4855
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Type::OrSymbol
4582
4856
  ).returns(T.attached_class)
@@ -4586,8 +4860,9 @@ module Revox
4586
4860
  # When the SMS was sent.
4587
4861
  created_at:,
4588
4862
  message_body:,
4863
+ provider:,
4864
+ provider_message_id:,
4589
4865
  to_phone_number:,
4590
- twilio_message_sid:,
4591
4866
  type:
4592
4867
  )
4593
4868
  end
@@ -4598,8 +4873,10 @@ module Revox
4598
4873
  id: String,
4599
4874
  created_at: T.anything,
4600
4875
  message_body: String,
4876
+ provider:
4877
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol,
4878
+ provider_message_id: T.nilable(String),
4601
4879
  to_phone_number: String,
4602
- twilio_message_sid: T.nilable(String),
4603
4880
  type:
4604
4881
  Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Type::TaggedSymbol
4605
4882
  }
@@ -4608,6 +4885,40 @@ module Revox
4608
4885
  def to_hash
4609
4886
  end
4610
4887
 
4888
+ module Provider
4889
+ extend Revox::Internal::Type::Enum
4890
+
4891
+ TaggedSymbol =
4892
+ T.type_alias do
4893
+ T.all(
4894
+ Symbol,
4895
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider
4896
+ )
4897
+ end
4898
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
4899
+
4900
+ TWILIO =
4901
+ T.let(
4902
+ :twilio,
4903
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
4904
+ )
4905
+ VONAGE =
4906
+ T.let(
4907
+ :vonage,
4908
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
4909
+ )
4910
+
4911
+ sig do
4912
+ override.returns(
4913
+ T::Array[
4914
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
4915
+ ]
4916
+ )
4917
+ end
4918
+ def self.values
4919
+ end
4920
+ end
4921
+
4611
4922
  module Type
4612
4923
  extend Revox::Internal::Type::Enum
4613
4924
 
@@ -4648,6 +4959,176 @@ module Revox
4648
4959
  end
4649
4960
  end
4650
4961
 
4962
+ class SpeechEvent < Revox::Internal::Type::BaseModel
4963
+ OrHash =
4964
+ T.type_alias do
4965
+ T.any(
4966
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent,
4967
+ Revox::Internal::AnyHash
4968
+ )
4969
+ end
4970
+
4971
+ sig { returns(String) }
4972
+ attr_accessor :id
4973
+
4974
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
4975
+ sig { returns(T::Boolean) }
4976
+ attr_accessor :is_real_turn
4977
+
4978
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
4979
+ # system instructions plus conversation history — as JSON.
4980
+ sig { returns(T.nilable(String)) }
4981
+ attr_accessor :llm_system_prompt
4982
+
4983
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
4984
+ sig { returns(T.nilable(Float)) }
4985
+ attr_accessor :llm_ttft_ms
4986
+
4987
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
4988
+ # a race, which is also the model `llm_ttft_ms` describes.
4989
+ sig { returns(T.nilable(String)) }
4990
+ attr_accessor :llm_winner_model
4991
+
4992
+ # Who was speaking during this segment.
4993
+ sig do
4994
+ returns(
4995
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
4996
+ )
4997
+ end
4998
+ attr_accessor :speaker
4999
+
5000
+ # Milliseconds since session start when speech began.
5001
+ sig { returns(Float) }
5002
+ attr_accessor :started_speaking_at_ms
5003
+
5004
+ # Milliseconds since session start when speech ended. Null when the session ended
5005
+ # before the turn closed.
5006
+ sig { returns(T.nilable(Float)) }
5007
+ attr_accessor :stopped_speaking_at_ms
5008
+
5009
+ # User-only: time from end-of-speech to final transcript, in ms.
5010
+ sig { returns(T.nilable(Float)) }
5011
+ attr_accessor :stt_transcription_delay_ms
5012
+
5013
+ # Recognized text for this segment, when available.
5014
+ sig { returns(T.nilable(String)) }
5015
+ attr_accessor :transcript
5016
+
5017
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
5018
+ sig { returns(T.nilable(Float)) }
5019
+ attr_accessor :tts_ttfb_ms
5020
+
5021
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
5022
+ # Null on user segments.
5023
+ sig { returns(T.nilable(T::Boolean)) }
5024
+ attr_accessor :was_cut
5025
+
5026
+ sig do
5027
+ params(
5028
+ id: String,
5029
+ is_real_turn: T::Boolean,
5030
+ llm_system_prompt: T.nilable(String),
5031
+ llm_ttft_ms: T.nilable(Float),
5032
+ llm_winner_model: T.nilable(String),
5033
+ speaker:
5034
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::OrSymbol,
5035
+ started_speaking_at_ms: Float,
5036
+ stopped_speaking_at_ms: T.nilable(Float),
5037
+ stt_transcription_delay_ms: T.nilable(Float),
5038
+ transcript: T.nilable(String),
5039
+ tts_ttfb_ms: T.nilable(Float),
5040
+ was_cut: T.nilable(T::Boolean)
5041
+ ).returns(T.attached_class)
5042
+ end
5043
+ def self.new(
5044
+ id:,
5045
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
5046
+ is_real_turn:,
5047
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
5048
+ # system instructions plus conversation history — as JSON.
5049
+ llm_system_prompt:,
5050
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
5051
+ llm_ttft_ms:,
5052
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
5053
+ # a race, which is also the model `llm_ttft_ms` describes.
5054
+ llm_winner_model:,
5055
+ # Who was speaking during this segment.
5056
+ speaker:,
5057
+ # Milliseconds since session start when speech began.
5058
+ started_speaking_at_ms:,
5059
+ # Milliseconds since session start when speech ended. Null when the session ended
5060
+ # before the turn closed.
5061
+ stopped_speaking_at_ms:,
5062
+ # User-only: time from end-of-speech to final transcript, in ms.
5063
+ stt_transcription_delay_ms:,
5064
+ # Recognized text for this segment, when available.
5065
+ transcript:,
5066
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
5067
+ tts_ttfb_ms:,
5068
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
5069
+ # Null on user segments.
5070
+ was_cut:
5071
+ )
5072
+ end
5073
+
5074
+ sig do
5075
+ override.returns(
5076
+ {
5077
+ id: String,
5078
+ is_real_turn: T::Boolean,
5079
+ llm_system_prompt: T.nilable(String),
5080
+ llm_ttft_ms: T.nilable(Float),
5081
+ llm_winner_model: T.nilable(String),
5082
+ speaker:
5083
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol,
5084
+ started_speaking_at_ms: Float,
5085
+ stopped_speaking_at_ms: T.nilable(Float),
5086
+ stt_transcription_delay_ms: T.nilable(Float),
5087
+ transcript: T.nilable(String),
5088
+ tts_ttfb_ms: T.nilable(Float),
5089
+ was_cut: T.nilable(T::Boolean)
5090
+ }
5091
+ )
5092
+ end
5093
+ def to_hash
5094
+ end
5095
+
5096
+ # Who was speaking during this segment.
5097
+ module Speaker
5098
+ extend Revox::Internal::Type::Enum
5099
+
5100
+ TaggedSymbol =
5101
+ T.type_alias do
5102
+ T.all(
5103
+ Symbol,
5104
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker
5105
+ )
5106
+ end
5107
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
5108
+
5109
+ USER =
5110
+ T.let(
5111
+ :user,
5112
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
5113
+ )
5114
+ AGENT =
5115
+ T.let(
5116
+ :agent,
5117
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
5118
+ )
5119
+
5120
+ sig do
5121
+ override.returns(
5122
+ T::Array[
5123
+ Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
5124
+ ]
5125
+ )
5126
+ end
5127
+ def self.values
5128
+ end
5129
+ end
5130
+ end
5131
+
4651
5132
  class Transcript < Revox::Internal::Type::BaseModel
4652
5133
  OrHash =
4653
5134
  T.type_alias do
@@ -4992,7 +5473,8 @@ module Revox
4992
5473
  sig { returns(String) }
4993
5474
  attr_accessor :calling_window_start_time
4994
5475
 
4995
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
5476
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
5477
+ # allows. Default: 7200 (2 hours).
4996
5478
  sig { returns(Integer) }
4997
5479
  attr_accessor :retry_delay_seconds
4998
5480
 
@@ -5012,7 +5494,8 @@ module Revox
5012
5494
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
5013
5495
  # Examples: '09:00', '10am'. Default: '10:00'.
5014
5496
  calling_window_start_time:,
5015
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
5497
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
5498
+ # allows. Default: 7200 (2 hours).
5016
5499
  retry_delay_seconds:
5017
5500
  )
5018
5501
  end
@@ -5073,6 +5556,9 @@ module Revox
5073
5556
  sig { returns(T.nilable(String)) }
5074
5557
  attr_accessor :first_name
5075
5558
 
5559
+ sig { returns(T.nilable(String)) }
5560
+ attr_accessor :job_title
5561
+
5076
5562
  sig { returns(T.nilable(String)) }
5077
5563
  attr_accessor :last_name
5078
5564
 
@@ -5083,10 +5569,11 @@ module Revox
5083
5569
  company: T.nilable(String),
5084
5570
  email: T.nilable(String),
5085
5571
  first_name: T.nilable(String),
5572
+ job_title: T.nilable(String),
5086
5573
  last_name: T.nilable(String)
5087
5574
  ).returns(T.attached_class)
5088
5575
  end
5089
- def self.new(company:, email:, first_name:, last_name:)
5576
+ def self.new(company:, email:, first_name:, job_title:, last_name:)
5090
5577
  end
5091
5578
 
5092
5579
  sig do
@@ -5095,6 +5582,7 @@ module Revox
5095
5582
  company: T.nilable(String),
5096
5583
  email: T.nilable(String),
5097
5584
  first_name: T.nilable(String),
5585
+ job_title: T.nilable(String),
5098
5586
  last_name: T.nilable(String)
5099
5587
  }
5100
5588
  )
@@ -5169,6 +5657,37 @@ module Revox
5169
5657
  sig { returns(T.anything) }
5170
5658
  attr_accessor :ended_at
5171
5659
 
5660
+ # Whether the AI agent conducted the conversation on this attempt. False for a
5661
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
5662
+ # were never answered.
5663
+ sig { returns(T::Boolean) }
5664
+ attr_accessor :handled_by_ai
5665
+
5666
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
5667
+ # or a speed-dial operator connection (both stamp human_takeover_at).
5668
+ sig { returns(T::Boolean) }
5669
+ attr_accessor :handled_by_human
5670
+
5671
+ # The team member responsible for following up on this call.
5672
+ sig do
5673
+ returns(
5674
+ T.nilable(
5675
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser
5676
+ )
5677
+ )
5678
+ end
5679
+ attr_reader :handled_by_user
5680
+
5681
+ sig do
5682
+ params(
5683
+ handled_by_user:
5684
+ T.nilable(
5685
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser::OrHash
5686
+ )
5687
+ ).void
5688
+ end
5689
+ attr_writer :handled_by_user
5690
+
5172
5691
  # The phone number that was called. Formatted in E.164 format. Example:
5173
5692
  # +1234567890
5174
5693
  sig { returns(String) }
@@ -5203,6 +5722,19 @@ module Revox
5203
5722
  sig { returns(T.nilable(T::Array[String])) }
5204
5723
  attr_accessor :assistants_used
5205
5724
 
5725
+ # Notification emails sent in connection with the call, ordered oldest first
5726
+ # (from/to addresses, subject, sent time).
5727
+ sig do
5728
+ returns(
5729
+ T.nilable(
5730
+ T::Array[
5731
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EmailLog
5732
+ ]
5733
+ )
5734
+ )
5735
+ end
5736
+ attr_accessor :email_log
5737
+
5206
5738
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
5207
5739
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
5208
5740
  sig do
@@ -5236,21 +5768,35 @@ module Revox
5236
5768
  )
5237
5769
  )
5238
5770
  end
5239
- attr_accessor :post_call_transcript
5771
+ attr_accessor :post_call_transcript
5772
+
5773
+ # Automatic SMS sent after the call (voicemail and after-call), ordered oldest
5774
+ # first. The in-call `send_sms` is excluded — it already appears in the transcript
5775
+ # as a tool call.
5776
+ sig do
5777
+ returns(
5778
+ T.nilable(
5779
+ T::Array[
5780
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog
5781
+ ]
5782
+ )
5783
+ )
5784
+ end
5785
+ attr_accessor :sms_log
5240
5786
 
5241
- # Automatic SMS sent after the call (voicemail and after-call), ordered oldest
5242
- # first. The in-call `send_sms` is excluded it already appears in the transcript
5243
- # as a tool call.
5787
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
5788
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
5789
+ # tracked or for realtime sessions that don't emit them.
5244
5790
  sig do
5245
5791
  returns(
5246
5792
  T.nilable(
5247
5793
  T::Array[
5248
- Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog
5794
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent
5249
5795
  ]
5250
5796
  )
5251
5797
  )
5252
5798
  end
5253
- attr_accessor :sms_log
5799
+ attr_accessor :speech_events
5254
5800
 
5255
5801
  # The data extracted from the call, using the structured output config from the
5256
5802
  # parent call object.
@@ -5280,6 +5826,12 @@ module Revox
5280
5826
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::DialError::OrSymbol
5281
5827
  ),
5282
5828
  ended_at: T.anything,
5829
+ handled_by_ai: T::Boolean,
5830
+ handled_by_human: T::Boolean,
5831
+ handled_by_user:
5832
+ T.nilable(
5833
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser::OrHash
5834
+ ),
5283
5835
  phone_number: String,
5284
5836
  recording_url: T.nilable(String),
5285
5837
  result:
@@ -5290,6 +5842,12 @@ module Revox
5290
5842
  status:
5291
5843
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::Status::OrSymbol,
5292
5844
  assistants_used: T.nilable(T::Array[String]),
5845
+ email_log:
5846
+ T.nilable(
5847
+ T::Array[
5848
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EmailLog::OrHash
5849
+ ]
5850
+ ),
5293
5851
  end_reason:
5294
5852
  T.nilable(
5295
5853
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EndReason::OrSymbol
@@ -5310,6 +5868,12 @@ module Revox
5310
5868
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::OrHash
5311
5869
  ]
5312
5870
  ),
5871
+ speech_events:
5872
+ T.nilable(
5873
+ T::Array[
5874
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::OrHash
5875
+ ]
5876
+ ),
5313
5877
  structured_output: T.nilable(T::Hash[Symbol, T.anything]),
5314
5878
  transcript:
5315
5879
  T.nilable(
@@ -5328,6 +5892,15 @@ module Revox
5328
5892
  dial_error:,
5329
5893
  # The time the call ended.
5330
5894
  ended_at:,
5895
+ # Whether the AI agent conducted the conversation on this attempt. False for a
5896
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
5897
+ # were never answered.
5898
+ handled_by_ai:,
5899
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
5900
+ # or a speed-dial operator connection (both stamp human_takeover_at).
5901
+ handled_by_human:,
5902
+ # The team member responsible for following up on this call.
5903
+ handled_by_user:,
5331
5904
  # The phone number that was called. Formatted in E.164 format. Example:
5332
5905
  # +1234567890
5333
5906
  phone_number:,
@@ -5340,6 +5913,9 @@ module Revox
5340
5913
  status:,
5341
5914
  # Assistant node ids entered during this attempt, in traversal order.
5342
5915
  assistants_used: nil,
5916
+ # Notification emails sent in connection with the call, ordered oldest first
5917
+ # (from/to addresses, subject, sent time).
5918
+ email_log: nil,
5343
5919
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
5344
5920
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
5345
5921
  end_reason: nil,
@@ -5353,6 +5929,10 @@ module Revox
5353
5929
  # first. The in-call `send_sms` is excluded — it already appears in the transcript
5354
5930
  # as a tool call.
5355
5931
  sms_log: nil,
5932
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
5933
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
5934
+ # tracked or for realtime sessions that don't emit them.
5935
+ speech_events: nil,
5356
5936
  # The data extracted from the call, using the structured output config from the
5357
5937
  # parent call object.
5358
5938
  structured_output: nil,
@@ -5371,6 +5951,12 @@ module Revox
5371
5951
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::DialError::TaggedSymbol
5372
5952
  ),
5373
5953
  ended_at: T.anything,
5954
+ handled_by_ai: T::Boolean,
5955
+ handled_by_human: T::Boolean,
5956
+ handled_by_user:
5957
+ T.nilable(
5958
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser
5959
+ ),
5374
5960
  phone_number: String,
5375
5961
  recording_url: T.nilable(String),
5376
5962
  result:
@@ -5381,6 +5967,12 @@ module Revox
5381
5967
  status:
5382
5968
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::Status::TaggedSymbol,
5383
5969
  assistants_used: T.nilable(T::Array[String]),
5970
+ email_log:
5971
+ T.nilable(
5972
+ T::Array[
5973
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EmailLog
5974
+ ]
5975
+ ),
5384
5976
  end_reason:
5385
5977
  T.nilable(
5386
5978
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EndReason::TaggedSymbol
@@ -5401,6 +5993,12 @@ module Revox
5401
5993
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog
5402
5994
  ]
5403
5995
  ),
5996
+ speech_events:
5997
+ T.nilable(
5998
+ T::Array[
5999
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent
6000
+ ]
6001
+ ),
5404
6002
  structured_output: T.nilable(T::Hash[Symbol, T.anything]),
5405
6003
  transcript:
5406
6004
  T.nilable(
@@ -5479,6 +6077,60 @@ module Revox
5479
6077
  end
5480
6078
  end
5481
6079
 
6080
+ class HandledByUser < Revox::Internal::Type::BaseModel
6081
+ OrHash =
6082
+ T.type_alias do
6083
+ T.any(
6084
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser,
6085
+ Revox::Internal::AnyHash
6086
+ )
6087
+ end
6088
+
6089
+ # The database user id of the assignee.
6090
+ sig { returns(String) }
6091
+ attr_accessor :id
6092
+
6093
+ sig { returns(String) }
6094
+ attr_accessor :email
6095
+
6096
+ sig { returns(T.nilable(String)) }
6097
+ attr_accessor :first_name
6098
+
6099
+ sig { returns(T.nilable(String)) }
6100
+ attr_accessor :last_name
6101
+
6102
+ # The team member responsible for following up on this call.
6103
+ sig do
6104
+ params(
6105
+ id: String,
6106
+ email: String,
6107
+ first_name: T.nilable(String),
6108
+ last_name: T.nilable(String)
6109
+ ).returns(T.attached_class)
6110
+ end
6111
+ def self.new(
6112
+ # The database user id of the assignee.
6113
+ id:,
6114
+ email:,
6115
+ first_name:,
6116
+ last_name:
6117
+ )
6118
+ end
6119
+
6120
+ sig do
6121
+ override.returns(
6122
+ {
6123
+ id: String,
6124
+ email: String,
6125
+ first_name: T.nilable(String),
6126
+ last_name: T.nilable(String)
6127
+ }
6128
+ )
6129
+ end
6130
+ def to_hash
6131
+ end
6132
+ end
6133
+
5482
6134
  module Result
5483
6135
  extend Revox::Internal::Type::Enum
5484
6136
 
@@ -5578,6 +6230,71 @@ module Revox
5578
6230
  end
5579
6231
  end
5580
6232
 
6233
+ class EmailLog < Revox::Internal::Type::BaseModel
6234
+ OrHash =
6235
+ T.type_alias do
6236
+ T.any(
6237
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EmailLog,
6238
+ Revox::Internal::AnyHash
6239
+ )
6240
+ end
6241
+
6242
+ sig { returns(String) }
6243
+ attr_accessor :id
6244
+
6245
+ # When the email was sent.
6246
+ sig { returns(T.anything) }
6247
+ attr_accessor :created_at
6248
+
6249
+ sig { returns(String) }
6250
+ attr_accessor :from_address
6251
+
6252
+ sig { returns(T.nilable(String)) }
6253
+ attr_accessor :resend_message_id
6254
+
6255
+ sig { returns(String) }
6256
+ attr_accessor :subject
6257
+
6258
+ sig { returns(T::Array[String]) }
6259
+ attr_accessor :to_emails
6260
+
6261
+ sig do
6262
+ params(
6263
+ id: String,
6264
+ created_at: T.anything,
6265
+ from_address: String,
6266
+ resend_message_id: T.nilable(String),
6267
+ subject: String,
6268
+ to_emails: T::Array[String]
6269
+ ).returns(T.attached_class)
6270
+ end
6271
+ def self.new(
6272
+ id:,
6273
+ # When the email was sent.
6274
+ created_at:,
6275
+ from_address:,
6276
+ resend_message_id:,
6277
+ subject:,
6278
+ to_emails:
6279
+ )
6280
+ end
6281
+
6282
+ sig do
6283
+ override.returns(
6284
+ {
6285
+ id: String,
6286
+ created_at: T.anything,
6287
+ from_address: String,
6288
+ resend_message_id: T.nilable(String),
6289
+ subject: String,
6290
+ to_emails: T::Array[String]
6291
+ }
6292
+ )
6293
+ end
6294
+ def to_hash
6295
+ end
6296
+ end
6297
+
5581
6298
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
5582
6299
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
5583
6300
  module EndReason
@@ -5905,11 +6622,18 @@ module Revox
5905
6622
  sig { returns(String) }
5906
6623
  attr_accessor :message_body
5907
6624
 
5908
- sig { returns(String) }
5909
- attr_accessor :to_phone_number
6625
+ sig do
6626
+ returns(
6627
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
6628
+ )
6629
+ end
6630
+ attr_accessor :provider
5910
6631
 
5911
6632
  sig { returns(T.nilable(String)) }
5912
- attr_accessor :twilio_message_sid
6633
+ attr_accessor :provider_message_id
6634
+
6635
+ sig { returns(String) }
6636
+ attr_accessor :to_phone_number
5913
6637
 
5914
6638
  sig do
5915
6639
  returns(
@@ -5923,8 +6647,10 @@ module Revox
5923
6647
  id: String,
5924
6648
  created_at: T.anything,
5925
6649
  message_body: String,
6650
+ provider:
6651
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::OrSymbol,
6652
+ provider_message_id: T.nilable(String),
5926
6653
  to_phone_number: String,
5927
- twilio_message_sid: T.nilable(String),
5928
6654
  type:
5929
6655
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Type::OrSymbol
5930
6656
  ).returns(T.attached_class)
@@ -5934,8 +6660,9 @@ module Revox
5934
6660
  # When the SMS was sent.
5935
6661
  created_at:,
5936
6662
  message_body:,
6663
+ provider:,
6664
+ provider_message_id:,
5937
6665
  to_phone_number:,
5938
- twilio_message_sid:,
5939
6666
  type:
5940
6667
  )
5941
6668
  end
@@ -5946,8 +6673,10 @@ module Revox
5946
6673
  id: String,
5947
6674
  created_at: T.anything,
5948
6675
  message_body: String,
6676
+ provider:
6677
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol,
6678
+ provider_message_id: T.nilable(String),
5949
6679
  to_phone_number: String,
5950
- twilio_message_sid: T.nilable(String),
5951
6680
  type:
5952
6681
  Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Type::TaggedSymbol
5953
6682
  }
@@ -5956,6 +6685,40 @@ module Revox
5956
6685
  def to_hash
5957
6686
  end
5958
6687
 
6688
+ module Provider
6689
+ extend Revox::Internal::Type::Enum
6690
+
6691
+ TaggedSymbol =
6692
+ T.type_alias do
6693
+ T.all(
6694
+ Symbol,
6695
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider
6696
+ )
6697
+ end
6698
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
6699
+
6700
+ TWILIO =
6701
+ T.let(
6702
+ :twilio,
6703
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
6704
+ )
6705
+ VONAGE =
6706
+ T.let(
6707
+ :vonage,
6708
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
6709
+ )
6710
+
6711
+ sig do
6712
+ override.returns(
6713
+ T::Array[
6714
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
6715
+ ]
6716
+ )
6717
+ end
6718
+ def self.values
6719
+ end
6720
+ end
6721
+
5959
6722
  module Type
5960
6723
  extend Revox::Internal::Type::Enum
5961
6724
 
@@ -5996,6 +6759,176 @@ module Revox
5996
6759
  end
5997
6760
  end
5998
6761
 
6762
+ class SpeechEvent < Revox::Internal::Type::BaseModel
6763
+ OrHash =
6764
+ T.type_alias do
6765
+ T.any(
6766
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent,
6767
+ Revox::Internal::AnyHash
6768
+ )
6769
+ end
6770
+
6771
+ sig { returns(String) }
6772
+ attr_accessor :id
6773
+
6774
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
6775
+ sig { returns(T::Boolean) }
6776
+ attr_accessor :is_real_turn
6777
+
6778
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
6779
+ # system instructions plus conversation history — as JSON.
6780
+ sig { returns(T.nilable(String)) }
6781
+ attr_accessor :llm_system_prompt
6782
+
6783
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
6784
+ sig { returns(T.nilable(Float)) }
6785
+ attr_accessor :llm_ttft_ms
6786
+
6787
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
6788
+ # a race, which is also the model `llm_ttft_ms` describes.
6789
+ sig { returns(T.nilable(String)) }
6790
+ attr_accessor :llm_winner_model
6791
+
6792
+ # Who was speaking during this segment.
6793
+ sig do
6794
+ returns(
6795
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
6796
+ )
6797
+ end
6798
+ attr_accessor :speaker
6799
+
6800
+ # Milliseconds since session start when speech began.
6801
+ sig { returns(Float) }
6802
+ attr_accessor :started_speaking_at_ms
6803
+
6804
+ # Milliseconds since session start when speech ended. Null when the session ended
6805
+ # before the turn closed.
6806
+ sig { returns(T.nilable(Float)) }
6807
+ attr_accessor :stopped_speaking_at_ms
6808
+
6809
+ # User-only: time from end-of-speech to final transcript, in ms.
6810
+ sig { returns(T.nilable(Float)) }
6811
+ attr_accessor :stt_transcription_delay_ms
6812
+
6813
+ # Recognized text for this segment, when available.
6814
+ sig { returns(T.nilable(String)) }
6815
+ attr_accessor :transcript
6816
+
6817
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
6818
+ sig { returns(T.nilable(Float)) }
6819
+ attr_accessor :tts_ttfb_ms
6820
+
6821
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
6822
+ # Null on user segments.
6823
+ sig { returns(T.nilable(T::Boolean)) }
6824
+ attr_accessor :was_cut
6825
+
6826
+ sig do
6827
+ params(
6828
+ id: String,
6829
+ is_real_turn: T::Boolean,
6830
+ llm_system_prompt: T.nilable(String),
6831
+ llm_ttft_ms: T.nilable(Float),
6832
+ llm_winner_model: T.nilable(String),
6833
+ speaker:
6834
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::OrSymbol,
6835
+ started_speaking_at_ms: Float,
6836
+ stopped_speaking_at_ms: T.nilable(Float),
6837
+ stt_transcription_delay_ms: T.nilable(Float),
6838
+ transcript: T.nilable(String),
6839
+ tts_ttfb_ms: T.nilable(Float),
6840
+ was_cut: T.nilable(T::Boolean)
6841
+ ).returns(T.attached_class)
6842
+ end
6843
+ def self.new(
6844
+ id:,
6845
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
6846
+ is_real_turn:,
6847
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
6848
+ # system instructions plus conversation history — as JSON.
6849
+ llm_system_prompt:,
6850
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
6851
+ llm_ttft_ms:,
6852
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
6853
+ # a race, which is also the model `llm_ttft_ms` describes.
6854
+ llm_winner_model:,
6855
+ # Who was speaking during this segment.
6856
+ speaker:,
6857
+ # Milliseconds since session start when speech began.
6858
+ started_speaking_at_ms:,
6859
+ # Milliseconds since session start when speech ended. Null when the session ended
6860
+ # before the turn closed.
6861
+ stopped_speaking_at_ms:,
6862
+ # User-only: time from end-of-speech to final transcript, in ms.
6863
+ stt_transcription_delay_ms:,
6864
+ # Recognized text for this segment, when available.
6865
+ transcript:,
6866
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
6867
+ tts_ttfb_ms:,
6868
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
6869
+ # Null on user segments.
6870
+ was_cut:
6871
+ )
6872
+ end
6873
+
6874
+ sig do
6875
+ override.returns(
6876
+ {
6877
+ id: String,
6878
+ is_real_turn: T::Boolean,
6879
+ llm_system_prompt: T.nilable(String),
6880
+ llm_ttft_ms: T.nilable(Float),
6881
+ llm_winner_model: T.nilable(String),
6882
+ speaker:
6883
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol,
6884
+ started_speaking_at_ms: Float,
6885
+ stopped_speaking_at_ms: T.nilable(Float),
6886
+ stt_transcription_delay_ms: T.nilable(Float),
6887
+ transcript: T.nilable(String),
6888
+ tts_ttfb_ms: T.nilable(Float),
6889
+ was_cut: T.nilable(T::Boolean)
6890
+ }
6891
+ )
6892
+ end
6893
+ def to_hash
6894
+ end
6895
+
6896
+ # Who was speaking during this segment.
6897
+ module Speaker
6898
+ extend Revox::Internal::Type::Enum
6899
+
6900
+ TaggedSymbol =
6901
+ T.type_alias do
6902
+ T.all(
6903
+ Symbol,
6904
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker
6905
+ )
6906
+ end
6907
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
6908
+
6909
+ USER =
6910
+ T.let(
6911
+ :user,
6912
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
6913
+ )
6914
+ AGENT =
6915
+ T.let(
6916
+ :agent,
6917
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
6918
+ )
6919
+
6920
+ sig do
6921
+ override.returns(
6922
+ T::Array[
6923
+ Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
6924
+ ]
6925
+ )
6926
+ end
6927
+ def self.values
6928
+ end
6929
+ end
6930
+ end
6931
+
5999
6932
  class Transcript < Revox::Internal::Type::BaseModel
6000
6933
  OrHash =
6001
6934
  T.type_alias do
@@ -6501,6 +7434,11 @@ module Revox
6501
7434
  :post_processing,
6502
7435
  Revox::Models::CallRetrieveResponse::Call::Status::TaggedSymbol
6503
7436
  )
7437
+ NOT_LAUNCHED =
7438
+ T.let(
7439
+ :not_launched,
7440
+ Revox::Models::CallRetrieveResponse::Call::Status::TaggedSymbol
7441
+ )
6504
7442
  SCHEDULED =
6505
7443
  T.let(
6506
7444
  :scheduled,
@@ -6568,21 +7506,6 @@ module Revox
6568
7506
  :requested_callback_later,
6569
7507
  Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
6570
7508
  )
6571
- REQUESTED_CALLBACK_NEW_NUMBER =
6572
- T.let(
6573
- :requested_callback_new_number,
6574
- Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
6575
- )
6576
- DO_NOT_CONTACT =
6577
- T.let(
6578
- :do_not_contact,
6579
- Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
6580
- )
6581
- AI_AVERSE =
6582
- T.let(
6583
- :ai_averse,
6584
- Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
6585
- )
6586
7509
 
6587
7510
  sig do
6588
7511
  override.returns(