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
@@ -204,6 +204,14 @@ module Revox
204
204
  # @return [Object]
205
205
  required :updated_at, Revox::Internal::Type::Unknown
206
206
 
207
+ # @!attribute follow_up_emails
208
+ # Extra notification recipients resolved from the agent prompt's own routing
209
+ # rules, when it defines any. Added to the assistant's configured notification
210
+ # recipients; never replaces them. Null when the prompt defines no routing rules.
211
+ #
212
+ # @return [Array<String>, nil]
213
+ optional :follow_up_emails, Revox::Internal::Type::ArrayOf[String], nil?: true
214
+
207
215
  # @!attribute outcome
208
216
  # Business outcome of the call. Null if not computed or no transcript.
209
217
  #
@@ -216,7 +224,16 @@ module Revox
216
224
  # @return [String, nil]
217
225
  optional :outcome_summary, String, nil?: true
218
226
 
219
- # @!method initialize(id:, assignee:, assistant:, call_attempts:, call_retry_config:, calls_count:, campaign:, contact:, created_at:, direction:, first_sentence_delay_ms:, from_phone_number:, is_cancelled:, is_completed:, last_call_attempt:, llm_model:, metadata:, organization_id:, prompt_variables:, scheduled_at:, status:, to_phone_number:, updated_at:, outcome: nil, outcome_summary: nil)
227
+ # @!attribute slack_channel_ids
228
+ # Slack channels resolved from the agent prompt's own routing rules, when it
229
+ # defines any. Always a subset of the channels configured on the assistant. Null
230
+ # when the prompt defines no routing rules, in which case every configured channel
231
+ # is notified.
232
+ #
233
+ # @return [Array<String>, nil]
234
+ optional :slack_channel_ids, Revox::Internal::Type::ArrayOf[String], nil?: true
235
+
236
+ # @!method initialize(id:, assignee:, assistant:, call_attempts:, call_retry_config:, calls_count:, campaign:, contact:, created_at:, direction:, first_sentence_delay_ms:, from_phone_number:, is_cancelled:, is_completed:, last_call_attempt:, llm_model:, metadata:, organization_id:, prompt_variables:, scheduled_at:, status:, to_phone_number:, updated_at:, follow_up_emails: nil, outcome: nil, outcome_summary: nil, slack_channel_ids: nil)
220
237
  # Some parameter documentations has been truncated, see
221
238
  # {Revox::Models::CampaignGetRowsResponse::Row::Call} for more details.
222
239
  #
@@ -269,9 +286,13 @@ module Revox
269
286
  #
270
287
  # @param updated_at [Object] The time the call order was last updated (any state change, retry, or analysis r
271
288
  #
289
+ # @param follow_up_emails [Array<String>, nil] Extra notification recipients resolved from the agent prompt's own routing rules
290
+ #
272
291
  # @param outcome [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Outcome, nil] Business outcome of the call. Null if not computed or no transcript.
273
292
  #
274
293
  # @param outcome_summary [String, nil] LLM explanation for the outcome, when outcome was computed from the transcript.
294
+ #
295
+ # @param slack_channel_ids [Array<String>, nil] Slack channels resolved from the agent prompt's own routing rules, when it defin
275
296
 
276
297
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call#assignee
277
298
  class Assignee < Revox::Internal::Type::BaseModel
@@ -387,13 +408,6 @@ module Revox
387
408
  # @return [String, nil]
388
409
  required :email_notification_address, String, nil?: true
389
410
 
390
- # @!attribute email_notification_language
391
- # The language used for the notification email content. One of "en" or "fr".
392
- #
393
- # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationLanguage]
394
- required :email_notification_language,
395
- enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationLanguage }
396
-
397
411
  # @!attribute email_notification_outcomes
398
412
  # Which call outcomes trigger an email notification. E.g. ["interested",
399
413
  # "completed", "none"]. Use "none" when outcome is null.
@@ -433,8 +447,8 @@ module Revox
433
447
  required :from_phone_number, String, nil?: true
434
448
 
435
449
  # @!attribute human_transfer_mode
436
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
437
- # not configured.
450
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
451
+ # transfer is not configured.
438
452
  #
439
453
  # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::HumanTransferMode, nil]
440
454
  required :human_transfer_mode,
@@ -492,6 +506,13 @@ module Revox
492
506
  -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Position },
493
507
  nil?: true
494
508
 
509
+ # @!attribute precall_lookup_url
510
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
511
+ # variables. Null when no lookup is configured.
512
+ #
513
+ # @return [String, nil]
514
+ required :precall_lookup_url, String, nil?: true
515
+
495
516
  # @!attribute prompt
496
517
  #
497
518
  # @return [String]
@@ -579,11 +600,14 @@ module Revox
579
600
  # @return [Float]
580
601
  required :thinking_sound_volume, Float
581
602
 
582
- # @!attribute transfer_phone_number
583
- # Phone number to transfer calls to when users request to speak to a human agent.
603
+ # @!attribute transfer_destinations
604
+ # Where calls can be transferred to when users ask to speak to a human. Null or
605
+ # empty when transfer is not configured.
584
606
  #
585
- # @return [String, nil]
586
- required :transfer_phone_number, String, nil?: true
607
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::TransferDestination>, nil]
608
+ required :transfer_destinations,
609
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::TransferDestination] },
610
+ nil?: true
587
611
 
588
612
  # @!attribute type
589
613
  #
@@ -646,6 +670,11 @@ module Revox
646
670
  optional :faq_items,
647
671
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::FaqItem] }
648
672
 
673
+ # @!attribute is_inbound_receptionist
674
+ #
675
+ # @return [Boolean, nil]
676
+ optional :is_inbound_receptionist, Revox::Internal::Type::Boolean
677
+
649
678
  # @!attribute is_realestate_assistant
650
679
  #
651
680
  # @return [Boolean, nil]
@@ -656,7 +685,7 @@ module Revox
656
685
  # @return [Float, nil]
657
686
  optional :pending_faq_count, Float
658
687
 
659
- # @!method initialize(id:, after_call_sms_outcomes:, after_call_sms_prompt:, background_sound:, background_sound_volume:, calendly:, call_retry_config:, cartesia_dictionary_pronunciation_id:, created_at:, custom_tools:, email_notification_address:, email_notification_language:, email_notification_outcomes:, end_of_call_sentence:, first_sentence:, first_sentence_delay_ms:, first_sentence_mode:, from_phone_number:, human_transfer_mode:, ivr_navigation_enabled:, llm_model:, logo_url:, max_call_duration_secs:, max_duration_end_message:, name:, organization_id:, position:, prompt:, prompt_flow:, slack:, sms_enabled:, sms_template:, structured_output_config:, structured_output_prompt:, stt_context:, stt_model:, thinking_sound:, thinking_sound_probability:, thinking_sound_volume:, transfer_phone_number:, type:, updated_at:, voice:, voicemail_message:, voicemail_sms_prompt:, warm_transfer_summary_instructions:, webhook_url:, zoho:, created_by: nil, faq_items: nil, is_realestate_assistant: nil, pending_faq_count: nil)
688
+ # @!method initialize(id:, after_call_sms_outcomes:, after_call_sms_prompt:, background_sound:, background_sound_volume:, calendly:, call_retry_config:, cartesia_dictionary_pronunciation_id:, created_at:, custom_tools:, email_notification_address:, email_notification_outcomes:, end_of_call_sentence:, first_sentence:, first_sentence_delay_ms:, first_sentence_mode:, from_phone_number:, human_transfer_mode:, ivr_navigation_enabled:, llm_model:, logo_url:, max_call_duration_secs:, max_duration_end_message:, name:, organization_id:, position:, precall_lookup_url:, prompt:, prompt_flow:, slack:, sms_enabled:, sms_template:, structured_output_config:, structured_output_prompt:, stt_context:, stt_model:, thinking_sound:, thinking_sound_probability:, thinking_sound_volume:, transfer_destinations:, type:, updated_at:, voice:, voicemail_message:, voicemail_sms_prompt:, warm_transfer_summary_instructions:, webhook_url:, zoho:, created_by: nil, faq_items: nil, is_inbound_receptionist: nil, is_realestate_assistant: nil, pending_faq_count: nil)
660
689
  # Some parameter documentations has been truncated, see
661
690
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant} for more details.
662
691
  #
@@ -682,8 +711,6 @@ module Revox
682
711
  #
683
712
  # @param email_notification_address [String, nil] Email address(es) to receive notifications when a call ends with a matching outc
684
713
  #
685
- # @param email_notification_language [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationLanguage] The language used for the notification email content. One of "en" or "fr".
686
- #
687
714
  # @param email_notification_outcomes [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationOutcome>, nil] Which call outcomes trigger an email notification. E.g. ["interested", "complete
688
715
  #
689
716
  # @param end_of_call_sentence [String, nil]
@@ -696,7 +723,7 @@ module Revox
696
723
  #
697
724
  # @param from_phone_number [String, nil] Override the default outbound phone number for calls placed with this assistant.
698
725
  #
699
- # @param human_transfer_mode [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::HumanTransferMode, nil] Warm or cold transfer when transfer_phone_number is set; null when transfer is n
726
+ # @param human_transfer_mode [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::HumanTransferMode, nil] Warm or cold transfer when transfer_destinations is non-empty; null when transfe
700
727
  #
701
728
  # @param ivr_navigation_enabled [Boolean] Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
702
729
  #
@@ -714,6 +741,8 @@ module Revox
714
741
  #
715
742
  # @param position [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Position, nil]
716
743
  #
744
+ # @param precall_lookup_url [String, nil] URL fetched before an inbound call is answered to resolve the assistant's prompt
745
+ #
717
746
  # @param prompt [String]
718
747
  #
719
748
  # @param prompt_flow [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow, nil]
@@ -738,7 +767,7 @@ module Revox
738
767
  #
739
768
  # @param thinking_sound_volume [Float] Volume of the thinking sound (0 = silent, 1 = max).
740
769
  #
741
- # @param transfer_phone_number [String, nil] Phone number to transfer calls to when users request to speak to a human agent.
770
+ # @param transfer_destinations [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::TransferDestination>, nil] Where calls can be transferred to when users ask to speak to a human. Null or em
742
771
  #
743
772
  # @param type [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Type]
744
773
  #
@@ -760,6 +789,8 @@ module Revox
760
789
  #
761
790
  # @param faq_items [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::FaqItem>]
762
791
  #
792
+ # @param is_inbound_receptionist [Boolean]
793
+ #
763
794
  # @param is_realestate_assistant [Boolean]
764
795
  #
765
796
  # @param pending_faq_count [Float]
@@ -771,9 +802,6 @@ module Revox
771
802
  INTERESTED = :interested
772
803
  COMPLETED = :completed
773
804
  REQUESTED_CALLBACK_LATER = :requested_callback_later
774
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
775
- DO_NOT_CONTACT = :do_not_contact
776
- AI_AVERSE = :ai_averse
777
805
  NONE = :none
778
806
 
779
807
  # @!method self.values
@@ -907,7 +935,8 @@ module Revox
907
935
  required :calling_window_start_time, String
908
936
 
909
937
  # @!attribute retry_delay_seconds
910
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
938
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
939
+ # allows. Default: 7200 (2 hours).
911
940
  #
912
941
  # @return [Integer]
913
942
  required :retry_delay_seconds, Integer
@@ -921,7 +950,7 @@ module Revox
921
950
  #
922
951
  # @param calling_window_start_time [String] Start time for the calling window in the recipient's timezone (or timezone_overr
923
952
  #
924
- # @param retry_delay_seconds [Integer] Delay between retry attempts in seconds. Default: 7200 (2 hours).
953
+ # @param retry_delay_seconds [Integer] Delay between retry attempts in seconds. 0 retries as soon as the calling window
925
954
  end
926
955
  end
927
956
 
@@ -1104,19 +1133,6 @@ module Revox
1104
1133
  end
1105
1134
  end
1106
1135
 
1107
- # The language used for the notification email content. One of "en" or "fr".
1108
- #
1109
- # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#email_notification_language
1110
- module EmailNotificationLanguage
1111
- extend Revox::Internal::Type::Enum
1112
-
1113
- EN = :en
1114
- FR = :fr
1115
-
1116
- # @!method self.values
1117
- # @return [Array<Symbol>]
1118
- end
1119
-
1120
1136
  module EmailNotificationOutcome
1121
1137
  extend Revox::Internal::Type::Enum
1122
1138
 
@@ -1124,9 +1140,6 @@ module Revox
1124
1140
  INTERESTED = :interested
1125
1141
  COMPLETED = :completed
1126
1142
  REQUESTED_CALLBACK_LATER = :requested_callback_later
1127
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1128
- DO_NOT_CONTACT = :do_not_contact
1129
- AI_AVERSE = :ai_averse
1130
1143
  NONE = :none
1131
1144
 
1132
1145
  # @!method self.values
@@ -1145,8 +1158,8 @@ module Revox
1145
1158
  # @return [Array<Symbol>]
1146
1159
  end
1147
1160
 
1148
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1149
- # not configured.
1161
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
1162
+ # transfer is not configured.
1150
1163
  #
1151
1164
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#human_transfer_mode
1152
1165
  module HumanTransferMode
@@ -1438,11 +1451,14 @@ module Revox
1438
1451
 
1439
1452
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#slack
1440
1453
  class Slack < Revox::Internal::Type::BaseModel
1441
- # @!attribute channel_id
1442
- # The Slack channel ID where the notification will be posted.
1454
+ # @!attribute channels
1455
+ # The Slack channels eligible to receive the notification. When more than one is
1456
+ # configured, the agent prompt may define routing rules to narrow it down per
1457
+ # call; with no such rules every channel here is notified.
1443
1458
  #
1444
- # @return [String]
1445
- required :channel_id, String
1459
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack::Channel>]
1460
+ required :channels,
1461
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack::Channel] }
1446
1462
 
1447
1463
  # @!attribute connection_id
1448
1464
  # The Nango connection ID linking the org's Slack workspace to Revox.
@@ -1458,38 +1474,54 @@ module Revox
1458
1474
  required :outcomes,
1459
1475
  -> { Revox::Internal::Type::ArrayOf[enum: Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack::Outcome] }
1460
1476
 
1461
- # @!attribute channel_name
1462
- # Human-readable Slack channel name, cached for display in the UI.
1463
- #
1464
- # @return [String, nil]
1465
- optional :channel_name, String, nil?: true
1466
-
1467
1477
  # @!attribute template
1468
1478
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1469
1479
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
1470
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
1471
- # prompt_variables and structured_output keys. When null/empty a default template
1472
- # is used.
1480
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
1481
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
1482
+ # null/empty a default template is used.
1473
1483
  #
1474
1484
  # @return [String, nil]
1475
1485
  optional :template, String, nil?: true
1476
1486
 
1477
- # @!method initialize(channel_id:, connection_id:, outcomes:, channel_name: nil, template: nil)
1487
+ # @!method initialize(channels:, connection_id:, outcomes:, template: nil)
1478
1488
  # Some parameter documentations has been truncated, see
1479
1489
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack} for more
1480
1490
  # details.
1481
1491
  #
1482
- # @param channel_id [String] The Slack channel ID where the notification will be posted.
1492
+ # @param channels [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack::Channel>] The Slack channels eligible to receive the notification. When more than one is c
1483
1493
  #
1484
1494
  # @param connection_id [String] The Nango connection ID linking the org's Slack workspace to Revox.
1485
1495
  #
1486
1496
  # @param outcomes [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack::Outcome>] Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
1487
1497
  #
1488
- # @param channel_name [String, nil] Human-readable Slack channel name, cached for display in the UI.
1489
- #
1490
1498
  # @param template [String, nil] Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1491
1499
  # {{call\_
1492
1500
 
1501
+ class Channel < Revox::Internal::Type::BaseModel
1502
+ # @!attribute id
1503
+ # The Slack channel ID (e.g. 'C01234567').
1504
+ #
1505
+ # @return [String]
1506
+ required :id, String
1507
+
1508
+ # @!attribute name
1509
+ # Human-readable Slack channel name, cached for display in the UI and given to the
1510
+ # LLM when the agent prompt routes by channel name.
1511
+ #
1512
+ # @return [String, nil]
1513
+ optional :name, String, nil?: true
1514
+
1515
+ # @!method initialize(id:, name: nil)
1516
+ # Some parameter documentations has been truncated, see
1517
+ # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack::Channel}
1518
+ # for more details.
1519
+ #
1520
+ # @param id [String] The Slack channel ID (e.g. 'C01234567').
1521
+ #
1522
+ # @param name [String, nil] Human-readable Slack channel name, cached for display in the UI and given to the
1523
+ end
1524
+
1493
1525
  module Outcome
1494
1526
  extend Revox::Internal::Type::Enum
1495
1527
 
@@ -1497,9 +1529,6 @@ module Revox
1497
1529
  INTERESTED = :interested
1498
1530
  COMPLETED = :completed
1499
1531
  REQUESTED_CALLBACK_LATER = :requested_callback_later
1500
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1501
- DO_NOT_CONTACT = :do_not_contact
1502
- AI_AVERSE = :ai_averse
1503
1532
  NONE = :none
1504
1533
 
1505
1534
  # @!method self.values
@@ -1627,6 +1656,22 @@ module Revox
1627
1656
  # @return [Array<Symbol>]
1628
1657
  end
1629
1658
 
1659
+ class TransferDestination < Revox::Internal::Type::BaseModel
1660
+ # @!attribute label
1661
+ #
1662
+ # @return [String]
1663
+ required :label, String
1664
+
1665
+ # @!attribute phone_number
1666
+ #
1667
+ # @return [String]
1668
+ required :phone_number, String
1669
+
1670
+ # @!method initialize(label:, phone_number:)
1671
+ # @param label [String]
1672
+ # @param phone_number [String]
1673
+ end
1674
+
1630
1675
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#type
1631
1676
  module Type
1632
1677
  extend Revox::Internal::Type::Enum
@@ -1663,7 +1708,7 @@ module Revox
1663
1708
 
1664
1709
  # @!attribute speed
1665
1710
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
1666
- # 0.7–1.2. Default is 1.0.
1711
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
1667
1712
  #
1668
1713
  # @return [Float, nil]
1669
1714
  optional :speed, Float
@@ -1698,6 +1743,7 @@ module Revox
1698
1743
 
1699
1744
  CARTESIA = :cartesia
1700
1745
  ELEVENLABS = :elevenlabs
1746
+ GRADIUM = :gradium
1701
1747
 
1702
1748
  # @!method self.values
1703
1749
  # @return [Array<Symbol>]
@@ -1813,9 +1859,6 @@ module Revox
1813
1859
  INTERESTED = :interested
1814
1860
  COMPLETED = :completed
1815
1861
  REQUESTED_CALLBACK_LATER = :requested_callback_later
1816
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1817
- DO_NOT_CONTACT = :do_not_contact
1818
- AI_AVERSE = :ai_averse
1819
1862
  NONE = :none
1820
1863
 
1821
1864
  # @!method self.values
@@ -1932,6 +1975,29 @@ module Revox
1932
1975
  # @return [Object]
1933
1976
  required :ended_at, Revox::Internal::Type::Unknown
1934
1977
 
1978
+ # @!attribute handled_by_ai
1979
+ # Whether the AI agent conducted the conversation on this attempt. False for a
1980
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
1981
+ # were never answered.
1982
+ #
1983
+ # @return [Boolean]
1984
+ required :handled_by_ai, Revox::Internal::Type::Boolean
1985
+
1986
+ # @!attribute handled_by_human
1987
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
1988
+ # or a speed-dial operator connection (both stamp human_takeover_at).
1989
+ #
1990
+ # @return [Boolean]
1991
+ required :handled_by_human, Revox::Internal::Type::Boolean
1992
+
1993
+ # @!attribute handled_by_user
1994
+ # The team member responsible for following up on this call.
1995
+ #
1996
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::HandledByUser, nil]
1997
+ required :handled_by_user,
1998
+ -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::HandledByUser },
1999
+ nil?: true
2000
+
1935
2001
  # @!attribute phone_number
1936
2002
  # The phone number that was called. Formatted in E.164 format. Example:
1937
2003
  # +1234567890
@@ -1970,6 +2036,15 @@ module Revox
1970
2036
  # @return [Array<String>, nil]
1971
2037
  optional :assistants_used, Revox::Internal::Type::ArrayOf[String], nil?: true
1972
2038
 
2039
+ # @!attribute email_log
2040
+ # Notification emails sent in connection with the call, ordered oldest first
2041
+ # (from/to addresses, subject, sent time).
2042
+ #
2043
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EmailLog>, nil]
2044
+ optional :email_log,
2045
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EmailLog] },
2046
+ nil?: true
2047
+
1973
2048
  # @!attribute end_reason
1974
2049
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
1975
2050
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
@@ -2007,6 +2082,16 @@ module Revox
2007
2082
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog] },
2008
2083
  nil?: true
2009
2084
 
2085
+ # @!attribute speech_events
2086
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
2087
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
2088
+ # tracked or for realtime sessions that don't emit them.
2089
+ #
2090
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SpeechEvent>, nil]
2091
+ optional :speech_events,
2092
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SpeechEvent] },
2093
+ nil?: true
2094
+
2010
2095
  # @!attribute structured_output
2011
2096
  # The data extracted from the call, using the structured output config from the
2012
2097
  # parent call object.
@@ -2024,7 +2109,7 @@ module Revox
2024
2109
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Transcript] },
2025
2110
  nil?: true
2026
2111
 
2027
- # @!method initialize(id:, answered_at:, dial_error:, ended_at:, phone_number:, recording_url:, result:, started_at:, status:, assistants_used: nil, end_reason: nil, ended_by: nil, post_call_transcript: nil, sms_log: nil, structured_output: nil, transcript: nil)
2112
+ # @!method initialize(id:, answered_at:, dial_error:, ended_at:, handled_by_ai:, handled_by_human:, handled_by_user:, phone_number:, recording_url:, result:, started_at:, status:, assistants_used: nil, email_log: nil, end_reason: nil, ended_by: nil, post_call_transcript: nil, sms_log: nil, speech_events: nil, structured_output: nil, transcript: nil)
2028
2113
  # Some parameter documentations has been truncated, see
2029
2114
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt} for more
2030
2115
  # details.
@@ -2040,6 +2125,12 @@ module Revox
2040
2125
  #
2041
2126
  # @param ended_at [Object] The time the call ended.
2042
2127
  #
2128
+ # @param handled_by_ai [Boolean] Whether the AI agent conducted the conversation on this attempt. False for a sil
2129
+ #
2130
+ # @param handled_by_human [Boolean] Whether a human operator conducted (part of) this attempt — a jump-in takeover o
2131
+ #
2132
+ # @param handled_by_user [Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::HandledByUser, nil] The team member responsible for following up on this call.
2133
+ #
2043
2134
  # @param phone_number [String] The phone number that was called. Formatted in E.164 format. Example: +123456789
2044
2135
  #
2045
2136
  # @param recording_url [String, nil] The URL of the audio recording of the call.
@@ -2052,6 +2143,8 @@ module Revox
2052
2143
  #
2053
2144
  # @param assistants_used [Array<String>, nil] Assistant node ids entered during this attempt, in traversal order.
2054
2145
  #
2146
+ # @param email_log [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EmailLog>, nil] Notification emails sent in connection with the call, ordered oldest first (from
2147
+ #
2055
2148
  # @param end_reason [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EndReason, nil] Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voic
2056
2149
  #
2057
2150
  # @param ended_by [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EndedBy, nil] Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or 'syst
@@ -2060,6 +2153,8 @@ module Revox
2060
2153
  #
2061
2154
  # @param sms_log [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog>, nil] Automatic SMS sent after the call (voicemail and after-call), ordered oldest fir
2062
2155
  #
2156
+ # @param speech_events [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SpeechEvent>, nil] Per-turn speech segments (VAD-derived) with timing and pipeline latencies, order
2157
+ #
2063
2158
  # @param structured_output [Hash{Symbol=>Object}, nil] The data extracted from the call, using the structured output config from the pa
2064
2159
  #
2065
2160
  # @param transcript [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Transcript>, nil] The live transcript of the call, built in real time.
@@ -2083,6 +2178,41 @@ module Revox
2083
2178
  # @return [Array<Symbol>]
2084
2179
  end
2085
2180
 
2181
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt#handled_by_user
2182
+ class HandledByUser < Revox::Internal::Type::BaseModel
2183
+ # @!attribute id
2184
+ # The database user id of the assignee.
2185
+ #
2186
+ # @return [String]
2187
+ required :id, String
2188
+
2189
+ # @!attribute email
2190
+ #
2191
+ # @return [String]
2192
+ required :email, String
2193
+
2194
+ # @!attribute first_name
2195
+ #
2196
+ # @return [String, nil]
2197
+ required :first_name, String, nil?: true
2198
+
2199
+ # @!attribute last_name
2200
+ #
2201
+ # @return [String, nil]
2202
+ required :last_name, String, nil?: true
2203
+
2204
+ # @!method initialize(id:, email:, first_name:, last_name:)
2205
+ # The team member responsible for following up on this call.
2206
+ #
2207
+ # @param id [String] The database user id of the assignee.
2208
+ #
2209
+ # @param email [String]
2210
+ #
2211
+ # @param first_name [String, nil]
2212
+ #
2213
+ # @param last_name [String, nil]
2214
+ end
2215
+
2086
2216
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt#result
2087
2217
  module Result
2088
2218
  extend Revox::Internal::Type::Enum
@@ -2113,6 +2243,52 @@ module Revox
2113
2243
  # @return [Array<Symbol>]
2114
2244
  end
2115
2245
 
2246
+ class EmailLog < Revox::Internal::Type::BaseModel
2247
+ # @!attribute id
2248
+ #
2249
+ # @return [String]
2250
+ required :id, String
2251
+
2252
+ # @!attribute created_at
2253
+ # When the email was sent.
2254
+ #
2255
+ # @return [Object]
2256
+ required :created_at, Revox::Internal::Type::Unknown
2257
+
2258
+ # @!attribute from_address
2259
+ #
2260
+ # @return [String]
2261
+ required :from_address, String
2262
+
2263
+ # @!attribute resend_message_id
2264
+ #
2265
+ # @return [String, nil]
2266
+ required :resend_message_id, String, nil?: true
2267
+
2268
+ # @!attribute subject
2269
+ #
2270
+ # @return [String]
2271
+ required :subject, String
2272
+
2273
+ # @!attribute to_emails
2274
+ #
2275
+ # @return [Array<String>]
2276
+ required :to_emails, Revox::Internal::Type::ArrayOf[String]
2277
+
2278
+ # @!method initialize(id:, created_at:, from_address:, resend_message_id:, subject:, to_emails:)
2279
+ # @param id [String]
2280
+ #
2281
+ # @param created_at [Object] When the email was sent.
2282
+ #
2283
+ # @param from_address [String]
2284
+ #
2285
+ # @param resend_message_id [String, nil]
2286
+ #
2287
+ # @param subject [String]
2288
+ #
2289
+ # @param to_emails [Array<String>]
2290
+ end
2291
+
2116
2292
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
2117
2293
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
2118
2294
  #
@@ -2243,34 +2419,53 @@ module Revox
2243
2419
  # @return [String]
2244
2420
  required :message_body, String
2245
2421
 
2246
- # @!attribute to_phone_number
2422
+ # @!attribute provider
2247
2423
  #
2248
- # @return [String]
2249
- required :to_phone_number, String
2424
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog::Provider]
2425
+ required :provider,
2426
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog::Provider }
2250
2427
 
2251
- # @!attribute twilio_message_sid
2428
+ # @!attribute provider_message_id
2252
2429
  #
2253
2430
  # @return [String, nil]
2254
- required :twilio_message_sid, String, nil?: true
2431
+ required :provider_message_id, String, nil?: true
2432
+
2433
+ # @!attribute to_phone_number
2434
+ #
2435
+ # @return [String]
2436
+ required :to_phone_number, String
2255
2437
 
2256
2438
  # @!attribute type
2257
2439
  #
2258
2440
  # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog::Type]
2259
2441
  required :type, enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog::Type }
2260
2442
 
2261
- # @!method initialize(id:, created_at:, message_body:, to_phone_number:, twilio_message_sid:, type:)
2443
+ # @!method initialize(id:, created_at:, message_body:, provider:, provider_message_id:, to_phone_number:, type:)
2262
2444
  # @param id [String]
2263
2445
  #
2264
2446
  # @param created_at [Object] When the SMS was sent.
2265
2447
  #
2266
2448
  # @param message_body [String]
2267
2449
  #
2268
- # @param to_phone_number [String]
2450
+ # @param provider [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog::Provider]
2451
+ #
2452
+ # @param provider_message_id [String, nil]
2269
2453
  #
2270
- # @param twilio_message_sid [String, nil]
2454
+ # @param to_phone_number [String]
2271
2455
  #
2272
2456
  # @param type [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog::Type]
2273
2457
 
2458
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog#provider
2459
+ module Provider
2460
+ extend Revox::Internal::Type::Enum
2461
+
2462
+ TWILIO = :twilio
2463
+ VONAGE = :vonage
2464
+
2465
+ # @!method self.values
2466
+ # @return [Array<Symbol>]
2467
+ end
2468
+
2274
2469
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog#type
2275
2470
  module Type
2276
2471
  extend Revox::Internal::Type::Enum
@@ -2284,6 +2479,126 @@ module Revox
2284
2479
  end
2285
2480
  end
2286
2481
 
2482
+ class SpeechEvent < Revox::Internal::Type::BaseModel
2483
+ # @!attribute id
2484
+ #
2485
+ # @return [String]
2486
+ required :id, String
2487
+
2488
+ # @!attribute is_real_turn
2489
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
2490
+ #
2491
+ # @return [Boolean]
2492
+ required :is_real_turn, Revox::Internal::Type::Boolean
2493
+
2494
+ # @!attribute llm_system_prompt
2495
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
2496
+ # system instructions plus conversation history — as JSON.
2497
+ #
2498
+ # @return [String, nil]
2499
+ required :llm_system_prompt, String, nil?: true
2500
+
2501
+ # @!attribute llm_ttft_ms
2502
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
2503
+ #
2504
+ # @return [Float, nil]
2505
+ required :llm_ttft_ms, Float, nil?: true
2506
+
2507
+ # @!attribute llm_winner_model
2508
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
2509
+ # a race, which is also the model `llm_ttft_ms` describes.
2510
+ #
2511
+ # @return [String, nil]
2512
+ required :llm_winner_model, String, nil?: true
2513
+
2514
+ # @!attribute speaker
2515
+ # Who was speaking during this segment.
2516
+ #
2517
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SpeechEvent::Speaker]
2518
+ required :speaker,
2519
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SpeechEvent::Speaker }
2520
+
2521
+ # @!attribute started_speaking_at_ms
2522
+ # Milliseconds since session start when speech began.
2523
+ #
2524
+ # @return [Float]
2525
+ required :started_speaking_at_ms, Float
2526
+
2527
+ # @!attribute stopped_speaking_at_ms
2528
+ # Milliseconds since session start when speech ended. Null when the session ended
2529
+ # before the turn closed.
2530
+ #
2531
+ # @return [Float, nil]
2532
+ required :stopped_speaking_at_ms, Float, nil?: true
2533
+
2534
+ # @!attribute stt_transcription_delay_ms
2535
+ # User-only: time from end-of-speech to final transcript, in ms.
2536
+ #
2537
+ # @return [Float, nil]
2538
+ required :stt_transcription_delay_ms, Float, nil?: true
2539
+
2540
+ # @!attribute transcript
2541
+ # Recognized text for this segment, when available.
2542
+ #
2543
+ # @return [String, nil]
2544
+ required :transcript, String, nil?: true
2545
+
2546
+ # @!attribute tts_ttfb_ms
2547
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
2548
+ #
2549
+ # @return [Float, nil]
2550
+ required :tts_ttfb_ms, Float, nil?: true
2551
+
2552
+ # @!attribute was_cut
2553
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
2554
+ # Null on user segments.
2555
+ #
2556
+ # @return [Boolean, nil]
2557
+ required :was_cut, Revox::Internal::Type::Boolean, nil?: true
2558
+
2559
+ # @!method initialize(id:, is_real_turn:, llm_system_prompt:, llm_ttft_ms:, llm_winner_model:, speaker:, started_speaking_at_ms:, stopped_speaking_at_ms:, stt_transcription_delay_ms:, transcript:, tts_ttfb_ms:, was_cut:)
2560
+ # Some parameter documentations has been truncated, see
2561
+ # {Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SpeechEvent}
2562
+ # for more details.
2563
+ #
2564
+ # @param id [String]
2565
+ #
2566
+ # @param is_real_turn [Boolean] False when the segment was flagged as noise/blip rather than a meaningful turn.
2567
+ #
2568
+ # @param llm_system_prompt [String, nil] Agent-only: despite the name, the whole prompt the LLM was given for this turn —
2569
+ #
2570
+ # @param llm_ttft_ms [Float, nil] Agent-only: LLM time-to-first-token for the reply, in ms.
2571
+ #
2572
+ # @param llm_winner_model [String, nil] Agent-only: the model that produced the reply — the winning leg when the LLM is
2573
+ #
2574
+ # @param speaker [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SpeechEvent::Speaker] Who was speaking during this segment.
2575
+ #
2576
+ # @param started_speaking_at_ms [Float] Milliseconds since session start when speech began.
2577
+ #
2578
+ # @param stopped_speaking_at_ms [Float, nil] Milliseconds since session start when speech ended. Null when the session ended
2579
+ #
2580
+ # @param stt_transcription_delay_ms [Float, nil] User-only: time from end-of-speech to final transcript, in ms.
2581
+ #
2582
+ # @param transcript [String, nil] Recognized text for this segment, when available.
2583
+ #
2584
+ # @param tts_ttfb_ms [Float, nil] Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
2585
+ #
2586
+ # @param was_cut [Boolean, nil] Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
2587
+
2588
+ # Who was speaking during this segment.
2589
+ #
2590
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SpeechEvent#speaker
2591
+ module Speaker
2592
+ extend Revox::Internal::Type::Enum
2593
+
2594
+ USER = :user
2595
+ AGENT = :agent
2596
+
2597
+ # @!method self.values
2598
+ # @return [Array<Symbol>]
2599
+ end
2600
+ end
2601
+
2287
2602
  class Transcript < Revox::Internal::Type::BaseModel
2288
2603
  # @!attribute content
2289
2604
  #
@@ -2445,7 +2760,8 @@ module Revox
2445
2760
  required :calling_window_start_time, String
2446
2761
 
2447
2762
  # @!attribute retry_delay_seconds
2448
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
2763
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
2764
+ # allows. Default: 7200 (2 hours).
2449
2765
  #
2450
2766
  # @return [Integer]
2451
2767
  required :retry_delay_seconds, Integer
@@ -2459,7 +2775,7 @@ module Revox
2459
2775
  #
2460
2776
  # @param calling_window_start_time [String] Start time for the calling window in the recipient's timezone (or timezone_overr
2461
2777
  #
2462
- # @param retry_delay_seconds [Integer] Delay between retry attempts in seconds. Default: 7200 (2 hours).
2778
+ # @param retry_delay_seconds [Integer] Delay between retry attempts in seconds. 0 retries as soon as the calling window
2463
2779
  end
2464
2780
  end
2465
2781
 
@@ -2497,18 +2813,24 @@ module Revox
2497
2813
  # @return [String, nil]
2498
2814
  required :first_name, String, nil?: true
2499
2815
 
2816
+ # @!attribute job_title
2817
+ #
2818
+ # @return [String, nil]
2819
+ required :job_title, String, nil?: true
2820
+
2500
2821
  # @!attribute last_name
2501
2822
  #
2502
2823
  # @return [String, nil]
2503
2824
  required :last_name, String, nil?: true
2504
2825
 
2505
- # @!method initialize(company:, email:, first_name:, last_name:)
2826
+ # @!method initialize(company:, email:, first_name:, job_title:, last_name:)
2506
2827
  # Magic contact variables (prospect identity) extracted from the call's input data
2507
2828
  # and transcript.
2508
2829
  #
2509
2830
  # @param company [String, nil]
2510
2831
  # @param email [String, nil]
2511
2832
  # @param first_name [String, nil]
2833
+ # @param job_title [String, nil]
2512
2834
  # @param last_name [String, nil]
2513
2835
  end
2514
2836
 
@@ -2553,6 +2875,29 @@ module Revox
2553
2875
  # @return [Object]
2554
2876
  required :ended_at, Revox::Internal::Type::Unknown
2555
2877
 
2878
+ # @!attribute handled_by_ai
2879
+ # Whether the AI agent conducted the conversation on this attempt. False for a
2880
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
2881
+ # were never answered.
2882
+ #
2883
+ # @return [Boolean]
2884
+ required :handled_by_ai, Revox::Internal::Type::Boolean
2885
+
2886
+ # @!attribute handled_by_human
2887
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
2888
+ # or a speed-dial operator connection (both stamp human_takeover_at).
2889
+ #
2890
+ # @return [Boolean]
2891
+ required :handled_by_human, Revox::Internal::Type::Boolean
2892
+
2893
+ # @!attribute handled_by_user
2894
+ # The team member responsible for following up on this call.
2895
+ #
2896
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::HandledByUser, nil]
2897
+ required :handled_by_user,
2898
+ -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::HandledByUser },
2899
+ nil?: true
2900
+
2556
2901
  # @!attribute phone_number
2557
2902
  # The phone number that was called. Formatted in E.164 format. Example:
2558
2903
  # +1234567890
@@ -2591,6 +2936,15 @@ module Revox
2591
2936
  # @return [Array<String>, nil]
2592
2937
  optional :assistants_used, Revox::Internal::Type::ArrayOf[String], nil?: true
2593
2938
 
2939
+ # @!attribute email_log
2940
+ # Notification emails sent in connection with the call, ordered oldest first
2941
+ # (from/to addresses, subject, sent time).
2942
+ #
2943
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EmailLog>, nil]
2944
+ optional :email_log,
2945
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EmailLog] },
2946
+ nil?: true
2947
+
2594
2948
  # @!attribute end_reason
2595
2949
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
2596
2950
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
@@ -2628,6 +2982,16 @@ module Revox
2628
2982
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog] },
2629
2983
  nil?: true
2630
2984
 
2985
+ # @!attribute speech_events
2986
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
2987
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
2988
+ # tracked or for realtime sessions that don't emit them.
2989
+ #
2990
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SpeechEvent>, nil]
2991
+ optional :speech_events,
2992
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SpeechEvent] },
2993
+ nil?: true
2994
+
2631
2995
  # @!attribute structured_output
2632
2996
  # The data extracted from the call, using the structured output config from the
2633
2997
  # parent call object.
@@ -2645,7 +3009,7 @@ module Revox
2645
3009
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Transcript] },
2646
3010
  nil?: true
2647
3011
 
2648
- # @!method initialize(id:, answered_at:, dial_error:, ended_at:, phone_number:, recording_url:, result:, started_at:, status:, assistants_used: nil, end_reason: nil, ended_by: nil, post_call_transcript: nil, sms_log: nil, structured_output: nil, transcript: nil)
3012
+ # @!method initialize(id:, answered_at:, dial_error:, ended_at:, handled_by_ai:, handled_by_human:, handled_by_user:, phone_number:, recording_url:, result:, started_at:, status:, assistants_used: nil, email_log: nil, end_reason: nil, ended_by: nil, post_call_transcript: nil, sms_log: nil, speech_events: nil, structured_output: nil, transcript: nil)
2649
3013
  # Some parameter documentations has been truncated, see
2650
3014
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt} for more
2651
3015
  # details.
@@ -2661,6 +3025,12 @@ module Revox
2661
3025
  #
2662
3026
  # @param ended_at [Object] The time the call ended.
2663
3027
  #
3028
+ # @param handled_by_ai [Boolean] Whether the AI agent conducted the conversation on this attempt. False for a sil
3029
+ #
3030
+ # @param handled_by_human [Boolean] Whether a human operator conducted (part of) this attempt — a jump-in takeover o
3031
+ #
3032
+ # @param handled_by_user [Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::HandledByUser, nil] The team member responsible for following up on this call.
3033
+ #
2664
3034
  # @param phone_number [String] The phone number that was called. Formatted in E.164 format. Example: +123456789
2665
3035
  #
2666
3036
  # @param recording_url [String, nil] The URL of the audio recording of the call.
@@ -2673,6 +3043,8 @@ module Revox
2673
3043
  #
2674
3044
  # @param assistants_used [Array<String>, nil] Assistant node ids entered during this attempt, in traversal order.
2675
3045
  #
3046
+ # @param email_log [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EmailLog>, nil] Notification emails sent in connection with the call, ordered oldest first (from
3047
+ #
2676
3048
  # @param end_reason [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EndReason, nil] Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voic
2677
3049
  #
2678
3050
  # @param ended_by [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EndedBy, nil] Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or 'syst
@@ -2681,6 +3053,8 @@ module Revox
2681
3053
  #
2682
3054
  # @param sms_log [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog>, nil] Automatic SMS sent after the call (voicemail and after-call), ordered oldest fir
2683
3055
  #
3056
+ # @param speech_events [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SpeechEvent>, nil] Per-turn speech segments (VAD-derived) with timing and pipeline latencies, order
3057
+ #
2684
3058
  # @param structured_output [Hash{Symbol=>Object}, nil] The data extracted from the call, using the structured output config from the pa
2685
3059
  #
2686
3060
  # @param transcript [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Transcript>, nil] The live transcript of the call, built in real time.
@@ -2704,6 +3078,41 @@ module Revox
2704
3078
  # @return [Array<Symbol>]
2705
3079
  end
2706
3080
 
3081
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt#handled_by_user
3082
+ class HandledByUser < Revox::Internal::Type::BaseModel
3083
+ # @!attribute id
3084
+ # The database user id of the assignee.
3085
+ #
3086
+ # @return [String]
3087
+ required :id, String
3088
+
3089
+ # @!attribute email
3090
+ #
3091
+ # @return [String]
3092
+ required :email, String
3093
+
3094
+ # @!attribute first_name
3095
+ #
3096
+ # @return [String, nil]
3097
+ required :first_name, String, nil?: true
3098
+
3099
+ # @!attribute last_name
3100
+ #
3101
+ # @return [String, nil]
3102
+ required :last_name, String, nil?: true
3103
+
3104
+ # @!method initialize(id:, email:, first_name:, last_name:)
3105
+ # The team member responsible for following up on this call.
3106
+ #
3107
+ # @param id [String] The database user id of the assignee.
3108
+ #
3109
+ # @param email [String]
3110
+ #
3111
+ # @param first_name [String, nil]
3112
+ #
3113
+ # @param last_name [String, nil]
3114
+ end
3115
+
2707
3116
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt#result
2708
3117
  module Result
2709
3118
  extend Revox::Internal::Type::Enum
@@ -2734,6 +3143,52 @@ module Revox
2734
3143
  # @return [Array<Symbol>]
2735
3144
  end
2736
3145
 
3146
+ class EmailLog < Revox::Internal::Type::BaseModel
3147
+ # @!attribute id
3148
+ #
3149
+ # @return [String]
3150
+ required :id, String
3151
+
3152
+ # @!attribute created_at
3153
+ # When the email was sent.
3154
+ #
3155
+ # @return [Object]
3156
+ required :created_at, Revox::Internal::Type::Unknown
3157
+
3158
+ # @!attribute from_address
3159
+ #
3160
+ # @return [String]
3161
+ required :from_address, String
3162
+
3163
+ # @!attribute resend_message_id
3164
+ #
3165
+ # @return [String, nil]
3166
+ required :resend_message_id, String, nil?: true
3167
+
3168
+ # @!attribute subject
3169
+ #
3170
+ # @return [String]
3171
+ required :subject, String
3172
+
3173
+ # @!attribute to_emails
3174
+ #
3175
+ # @return [Array<String>]
3176
+ required :to_emails, Revox::Internal::Type::ArrayOf[String]
3177
+
3178
+ # @!method initialize(id:, created_at:, from_address:, resend_message_id:, subject:, to_emails:)
3179
+ # @param id [String]
3180
+ #
3181
+ # @param created_at [Object] When the email was sent.
3182
+ #
3183
+ # @param from_address [String]
3184
+ #
3185
+ # @param resend_message_id [String, nil]
3186
+ #
3187
+ # @param subject [String]
3188
+ #
3189
+ # @param to_emails [Array<String>]
3190
+ end
3191
+
2737
3192
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
2738
3193
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
2739
3194
  #
@@ -2864,15 +3319,21 @@ module Revox
2864
3319
  # @return [String]
2865
3320
  required :message_body, String
2866
3321
 
2867
- # @!attribute to_phone_number
3322
+ # @!attribute provider
2868
3323
  #
2869
- # @return [String]
2870
- required :to_phone_number, String
3324
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog::Provider]
3325
+ required :provider,
3326
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog::Provider }
2871
3327
 
2872
- # @!attribute twilio_message_sid
3328
+ # @!attribute provider_message_id
2873
3329
  #
2874
3330
  # @return [String, nil]
2875
- required :twilio_message_sid, String, nil?: true
3331
+ required :provider_message_id, String, nil?: true
3332
+
3333
+ # @!attribute to_phone_number
3334
+ #
3335
+ # @return [String]
3336
+ required :to_phone_number, String
2876
3337
 
2877
3338
  # @!attribute type
2878
3339
  #
@@ -2880,19 +3341,32 @@ module Revox
2880
3341
  required :type,
2881
3342
  enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog::Type }
2882
3343
 
2883
- # @!method initialize(id:, created_at:, message_body:, to_phone_number:, twilio_message_sid:, type:)
3344
+ # @!method initialize(id:, created_at:, message_body:, provider:, provider_message_id:, to_phone_number:, type:)
2884
3345
  # @param id [String]
2885
3346
  #
2886
3347
  # @param created_at [Object] When the SMS was sent.
2887
3348
  #
2888
3349
  # @param message_body [String]
2889
3350
  #
2890
- # @param to_phone_number [String]
3351
+ # @param provider [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog::Provider]
2891
3352
  #
2892
- # @param twilio_message_sid [String, nil]
3353
+ # @param provider_message_id [String, nil]
3354
+ #
3355
+ # @param to_phone_number [String]
2893
3356
  #
2894
3357
  # @param type [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog::Type]
2895
3358
 
3359
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog#provider
3360
+ module Provider
3361
+ extend Revox::Internal::Type::Enum
3362
+
3363
+ TWILIO = :twilio
3364
+ VONAGE = :vonage
3365
+
3366
+ # @!method self.values
3367
+ # @return [Array<Symbol>]
3368
+ end
3369
+
2896
3370
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog#type
2897
3371
  module Type
2898
3372
  extend Revox::Internal::Type::Enum
@@ -2906,6 +3380,126 @@ module Revox
2906
3380
  end
2907
3381
  end
2908
3382
 
3383
+ class SpeechEvent < Revox::Internal::Type::BaseModel
3384
+ # @!attribute id
3385
+ #
3386
+ # @return [String]
3387
+ required :id, String
3388
+
3389
+ # @!attribute is_real_turn
3390
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
3391
+ #
3392
+ # @return [Boolean]
3393
+ required :is_real_turn, Revox::Internal::Type::Boolean
3394
+
3395
+ # @!attribute llm_system_prompt
3396
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
3397
+ # system instructions plus conversation history — as JSON.
3398
+ #
3399
+ # @return [String, nil]
3400
+ required :llm_system_prompt, String, nil?: true
3401
+
3402
+ # @!attribute llm_ttft_ms
3403
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
3404
+ #
3405
+ # @return [Float, nil]
3406
+ required :llm_ttft_ms, Float, nil?: true
3407
+
3408
+ # @!attribute llm_winner_model
3409
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
3410
+ # a race, which is also the model `llm_ttft_ms` describes.
3411
+ #
3412
+ # @return [String, nil]
3413
+ required :llm_winner_model, String, nil?: true
3414
+
3415
+ # @!attribute speaker
3416
+ # Who was speaking during this segment.
3417
+ #
3418
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SpeechEvent::Speaker]
3419
+ required :speaker,
3420
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SpeechEvent::Speaker }
3421
+
3422
+ # @!attribute started_speaking_at_ms
3423
+ # Milliseconds since session start when speech began.
3424
+ #
3425
+ # @return [Float]
3426
+ required :started_speaking_at_ms, Float
3427
+
3428
+ # @!attribute stopped_speaking_at_ms
3429
+ # Milliseconds since session start when speech ended. Null when the session ended
3430
+ # before the turn closed.
3431
+ #
3432
+ # @return [Float, nil]
3433
+ required :stopped_speaking_at_ms, Float, nil?: true
3434
+
3435
+ # @!attribute stt_transcription_delay_ms
3436
+ # User-only: time from end-of-speech to final transcript, in ms.
3437
+ #
3438
+ # @return [Float, nil]
3439
+ required :stt_transcription_delay_ms, Float, nil?: true
3440
+
3441
+ # @!attribute transcript
3442
+ # Recognized text for this segment, when available.
3443
+ #
3444
+ # @return [String, nil]
3445
+ required :transcript, String, nil?: true
3446
+
3447
+ # @!attribute tts_ttfb_ms
3448
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
3449
+ #
3450
+ # @return [Float, nil]
3451
+ required :tts_ttfb_ms, Float, nil?: true
3452
+
3453
+ # @!attribute was_cut
3454
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
3455
+ # Null on user segments.
3456
+ #
3457
+ # @return [Boolean, nil]
3458
+ required :was_cut, Revox::Internal::Type::Boolean, nil?: true
3459
+
3460
+ # @!method initialize(id:, is_real_turn:, llm_system_prompt:, llm_ttft_ms:, llm_winner_model:, speaker:, started_speaking_at_ms:, stopped_speaking_at_ms:, stt_transcription_delay_ms:, transcript:, tts_ttfb_ms:, was_cut:)
3461
+ # Some parameter documentations has been truncated, see
3462
+ # {Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SpeechEvent}
3463
+ # for more details.
3464
+ #
3465
+ # @param id [String]
3466
+ #
3467
+ # @param is_real_turn [Boolean] False when the segment was flagged as noise/blip rather than a meaningful turn.
3468
+ #
3469
+ # @param llm_system_prompt [String, nil] Agent-only: despite the name, the whole prompt the LLM was given for this turn —
3470
+ #
3471
+ # @param llm_ttft_ms [Float, nil] Agent-only: LLM time-to-first-token for the reply, in ms.
3472
+ #
3473
+ # @param llm_winner_model [String, nil] Agent-only: the model that produced the reply — the winning leg when the LLM is
3474
+ #
3475
+ # @param speaker [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SpeechEvent::Speaker] Who was speaking during this segment.
3476
+ #
3477
+ # @param started_speaking_at_ms [Float] Milliseconds since session start when speech began.
3478
+ #
3479
+ # @param stopped_speaking_at_ms [Float, nil] Milliseconds since session start when speech ended. Null when the session ended
3480
+ #
3481
+ # @param stt_transcription_delay_ms [Float, nil] User-only: time from end-of-speech to final transcript, in ms.
3482
+ #
3483
+ # @param transcript [String, nil] Recognized text for this segment, when available.
3484
+ #
3485
+ # @param tts_ttfb_ms [Float, nil] Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
3486
+ #
3487
+ # @param was_cut [Boolean, nil] Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
3488
+
3489
+ # Who was speaking during this segment.
3490
+ #
3491
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SpeechEvent#speaker
3492
+ module Speaker
3493
+ extend Revox::Internal::Type::Enum
3494
+
3495
+ USER = :user
3496
+ AGENT = :agent
3497
+
3498
+ # @!method self.values
3499
+ # @return [Array<Symbol>]
3500
+ end
3501
+ end
3502
+
2909
3503
  class Transcript < Revox::Internal::Type::BaseModel
2910
3504
  # @!attribute content
2911
3505
  #
@@ -3142,6 +3736,7 @@ module Revox
3142
3736
  QUEUED_FOR_CALLING = :queued_for_calling
3143
3737
  CALLING = :calling
3144
3738
  POST_PROCESSING = :post_processing
3739
+ NOT_LAUNCHED = :not_launched
3145
3740
  SCHEDULED = :scheduled
3146
3741
  PAUSED = :paused
3147
3742
  COMPLETED = :completed
@@ -3162,9 +3757,6 @@ module Revox
3162
3757
  INTERESTED = :interested
3163
3758
  COMPLETED = :completed
3164
3759
  REQUESTED_CALLBACK_LATER = :requested_callback_later
3165
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
3166
- DO_NOT_CONTACT = :do_not_contact
3167
- AI_AVERSE = :ai_averse
3168
3760
 
3169
3761
  # @!method self.values
3170
3762
  # @return [Array<Symbol>]