revox 0.3.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 (105) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/README.md +38 -38
  4. data/lib/revox/models/assistant_clone_response.rb +87 -65
  5. data/lib/revox/models/assistant_create_params.rb +90 -66
  6. data/lib/revox/models/assistant_create_response.rb +87 -65
  7. data/lib/revox/models/assistant_list_response.rb +87 -65
  8. data/lib/revox/models/assistant_retrieve_response.rb +86 -65
  9. data/lib/revox/models/assistant_update_params.rb +90 -66
  10. data/lib/revox/models/assistant_update_response.rb +87 -65
  11. data/lib/revox/models/call_create_params.rb +117 -90
  12. data/lib/revox/models/call_create_response.rb +670 -90
  13. data/lib/revox/models/call_export_params.rb +1 -3
  14. data/lib/revox/models/call_phone_history_response.rb +0 -3
  15. data/lib/revox/models/call_retrieve_response.rb +671 -90
  16. data/lib/revox/models/call_search_params.rb +1 -3
  17. data/lib/revox/models/call_search_response.rb +670 -90
  18. data/lib/revox/models/campaign_create_params.rb +7 -57
  19. data/lib/revox/models/campaign_create_response.rb +108 -119
  20. data/lib/revox/models/campaign_get_rows_response.rb +672 -90
  21. data/lib/revox/models/campaign_list_response.rb +108 -119
  22. data/lib/revox/models/campaign_retrieve_response.rb +108 -119
  23. data/lib/revox/models/campaign_statistics_response.rb +51 -23
  24. data/lib/revox/models/campaign_update_params.rb +9 -78
  25. data/lib/revox/models/campaign_update_response.rb +108 -119
  26. data/lib/revox/models/phone_number_list_response.rb +87 -65
  27. data/lib/revox/models/phone_number_update_response.rb +87 -65
  28. data/lib/revox/models/voice_list_response.rb +1 -0
  29. data/lib/revox/models/voice_preview_params.rb +1 -0
  30. data/lib/revox/models/voice_retrieve_params.rb +1 -0
  31. data/lib/revox/models.rb +0 -2
  32. data/lib/revox/resources/assistants.rb +10 -10
  33. data/lib/revox/resources/call.rb +4 -4
  34. data/lib/revox/resources/campaigns.rb +13 -45
  35. data/lib/revox/version.rb +1 -1
  36. data/lib/revox.rb +0 -2
  37. data/rbi/revox/models/assistant_clone_response.rbi +157 -147
  38. data/rbi/revox/models/assistant_create_params.rbi +148 -162
  39. data/rbi/revox/models/assistant_create_response.rbi +157 -147
  40. data/rbi/revox/models/assistant_list_response.rbi +157 -147
  41. data/rbi/revox/models/assistant_retrieve_response.rbi +153 -147
  42. data/rbi/revox/models/assistant_update_params.rbi +148 -162
  43. data/rbi/revox/models/assistant_update_response.rbi +157 -147
  44. data/rbi/revox/models/call_create_params.rbi +190 -187
  45. data/rbi/revox/models/call_create_response.rbi +1138 -227
  46. data/rbi/revox/models/call_export_params.rbi +5 -15
  47. data/rbi/revox/models/call_phone_history_response.rbi +0 -15
  48. data/rbi/revox/models/call_retrieve_response.rbi +1138 -227
  49. data/rbi/revox/models/call_search_params.rbi +2 -9
  50. data/rbi/revox/models/call_search_response.rbi +1138 -227
  51. data/rbi/revox/models/campaign_create_params.rbi +9 -87
  52. data/rbi/revox/models/campaign_create_response.rbi +188 -266
  53. data/rbi/revox/models/campaign_get_rows_response.rbi +1138 -225
  54. data/rbi/revox/models/campaign_list_response.rbi +188 -262
  55. data/rbi/revox/models/campaign_retrieve_response.rbi +188 -266
  56. data/rbi/revox/models/campaign_statistics_response.rbi +94 -36
  57. data/rbi/revox/models/campaign_update_params.rbi +10 -128
  58. data/rbi/revox/models/campaign_update_response.rbi +188 -266
  59. data/rbi/revox/models/phone_number_list_response.rbi +157 -147
  60. data/rbi/revox/models/phone_number_update_response.rbi +157 -147
  61. data/rbi/revox/models/voice_list_response.rbi +5 -0
  62. data/rbi/revox/models/voice_preview_params.rbi +2 -0
  63. data/rbi/revox/models/voice_retrieve_params.rbi +2 -0
  64. data/rbi/revox/models.rbi +0 -2
  65. data/rbi/revox/resources/assistants.rbi +40 -22
  66. data/rbi/revox/resources/call.rbi +7 -4
  67. data/rbi/revox/resources/campaigns.rbi +12 -44
  68. data/sig/revox/models/assistant_clone_response.rbs +46 -54
  69. data/sig/revox/models/assistant_create_params.rbs +39 -58
  70. data/sig/revox/models/assistant_create_response.rbs +46 -54
  71. data/sig/revox/models/assistant_list_response.rbs +46 -54
  72. data/sig/revox/models/assistant_retrieve_response.rbs +46 -54
  73. data/sig/revox/models/assistant_update_params.rbs +39 -58
  74. data/sig/revox/models/assistant_update_response.rbs +46 -54
  75. data/sig/revox/models/call_create_params.rbs +50 -71
  76. data/sig/revox/models/call_create_response.rbs +468 -77
  77. data/sig/revox/models/call_export_params.rbs +2 -6
  78. data/sig/revox/models/call_phone_history_response.rbs +1 -10
  79. data/sig/revox/models/call_retrieve_response.rbs +468 -77
  80. data/sig/revox/models/call_search_params.rbs +2 -6
  81. data/sig/revox/models/call_search_response.rbs +468 -77
  82. data/sig/revox/models/campaign_create_params.rbs +5 -50
  83. data/sig/revox/models/campaign_create_response.rbs +62 -98
  84. data/sig/revox/models/campaign_get_rows_response.rbs +467 -73
  85. data/sig/revox/models/campaign_list_response.rbs +62 -98
  86. data/sig/revox/models/campaign_retrieve_response.rbs +62 -98
  87. data/sig/revox/models/campaign_statistics_response.rbs +55 -24
  88. data/sig/revox/models/campaign_update_params.rbs +1 -69
  89. data/sig/revox/models/campaign_update_response.rbs +62 -98
  90. data/sig/revox/models/phone_number_list_response.rbs +46 -54
  91. data/sig/revox/models/phone_number_update_response.rbs +46 -54
  92. data/sig/revox/models/voice_list_response.rbs +2 -1
  93. data/sig/revox/models/voice_preview_params.rbs +2 -1
  94. data/sig/revox/models/voice_retrieve_params.rbs +2 -1
  95. data/sig/revox/models.rbs +0 -2
  96. data/sig/revox/resources/assistants.rbs +4 -4
  97. data/sig/revox/resources/call.rbs +1 -1
  98. data/sig/revox/resources/campaigns.rbs +0 -12
  99. metadata +2 -8
  100. data/lib/revox/models/campaign_launch_params.rb +0 -20
  101. data/lib/revox/models/campaign_launch_response.rb +0 -2030
  102. data/rbi/revox/models/campaign_launch_params.rbi +0 -33
  103. data/rbi/revox/models/campaign_launch_response.rbi +0 -4170
  104. data/sig/revox/models/campaign_launch_params.rbs +0 -20
  105. data/sig/revox/models/campaign_launch_response.rbs +0 -1694
@@ -183,7 +183,16 @@ module Revox
183
183
  # @return [String, nil]
184
184
  optional :outcome_summary, String, nil?: true
185
185
 
186
- # @!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)
186
+ # @!attribute slack_channel_ids
187
+ # Slack channels resolved from the agent prompt's own routing rules, when it
188
+ # defines any. Always a subset of the channels configured on the assistant. Null
189
+ # when the prompt defines no routing rules, in which case every configured channel
190
+ # is notified.
191
+ #
192
+ # @return [Array<String>, nil]
193
+ optional :slack_channel_ids, Revox::Internal::Type::ArrayOf[String], nil?: true
194
+
195
+ # @!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)
187
196
  # Some parameter documentations has been truncated, see
188
197
  # {Revox::Models::CallCreateResponse::Call} for more details.
189
198
  #
@@ -241,6 +250,8 @@ module Revox
241
250
  # @param outcome [Symbol, Revox::Models::CallCreateResponse::Call::Outcome, nil] Business outcome of the call. Null if not computed or no transcript.
242
251
  #
243
252
  # @param outcome_summary [String, nil] LLM explanation for the outcome, when outcome was computed from the transcript.
253
+ #
254
+ # @param slack_channel_ids [Array<String>, nil] Slack channels resolved from the agent prompt's own routing rules, when it defin
244
255
 
245
256
  # @see Revox::Models::CallCreateResponse::Call#assignee
246
257
  class Assignee < Revox::Internal::Type::BaseModel
@@ -354,13 +365,6 @@ module Revox
354
365
  # @return [String, nil]
355
366
  required :email_notification_address, String, nil?: true
356
367
 
357
- # @!attribute email_notification_language
358
- # The language used for the notification email content. One of "en" or "fr".
359
- #
360
- # @return [Symbol, Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage]
361
- required :email_notification_language,
362
- enum: -> { Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage }
363
-
364
368
  # @!attribute email_notification_outcomes
365
369
  # Which call outcomes trigger an email notification. E.g. ["interested",
366
370
  # "completed", "none"]. Use "none" when outcome is null.
@@ -400,8 +404,8 @@ module Revox
400
404
  required :from_phone_number, String, nil?: true
401
405
 
402
406
  # @!attribute human_transfer_mode
403
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
404
- # not configured.
407
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
408
+ # transfer is not configured.
405
409
  #
406
410
  # @return [Symbol, Revox::Models::CallCreateResponse::Call::Assistant::HumanTransferMode, nil]
407
411
  required :human_transfer_mode,
@@ -457,6 +461,13 @@ module Revox
457
461
  # @return [Revox::Models::CallCreateResponse::Call::Assistant::Position, nil]
458
462
  required :position, -> { Revox::Models::CallCreateResponse::Call::Assistant::Position }, nil?: true
459
463
 
464
+ # @!attribute precall_lookup_url
465
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
466
+ # variables. Null when no lookup is configured.
467
+ #
468
+ # @return [String, nil]
469
+ required :precall_lookup_url, String, nil?: true
470
+
460
471
  # @!attribute prompt
461
472
  #
462
473
  # @return [String]
@@ -540,11 +551,14 @@ module Revox
540
551
  # @return [Float]
541
552
  required :thinking_sound_volume, Float
542
553
 
543
- # @!attribute transfer_phone_number
544
- # Phone number to transfer calls to when users request to speak to a human agent.
554
+ # @!attribute transfer_destinations
555
+ # Where calls can be transferred to when users ask to speak to a human. Null or
556
+ # empty when transfer is not configured.
545
557
  #
546
- # @return [String, nil]
547
- required :transfer_phone_number, String, nil?: true
558
+ # @return [Array<Revox::Models::CallCreateResponse::Call::Assistant::TransferDestination>, nil]
559
+ required :transfer_destinations,
560
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::Assistant::TransferDestination] },
561
+ nil?: true
548
562
 
549
563
  # @!attribute type
550
564
  #
@@ -605,6 +619,11 @@ module Revox
605
619
  optional :faq_items,
606
620
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::Assistant::FaqItem] }
607
621
 
622
+ # @!attribute is_inbound_receptionist
623
+ #
624
+ # @return [Boolean, nil]
625
+ optional :is_inbound_receptionist, Revox::Internal::Type::Boolean
626
+
608
627
  # @!attribute is_realestate_assistant
609
628
  #
610
629
  # @return [Boolean, nil]
@@ -615,7 +634,7 @@ module Revox
615
634
  # @return [Float, nil]
616
635
  optional :pending_faq_count, Float
617
636
 
618
- # @!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)
637
+ # @!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)
619
638
  # Some parameter documentations has been truncated, see
620
639
  # {Revox::Models::CallCreateResponse::Call::Assistant} for more details.
621
640
  #
@@ -641,8 +660,6 @@ module Revox
641
660
  #
642
661
  # @param email_notification_address [String, nil] Email address(es) to receive notifications when a call ends with a matching outc
643
662
  #
644
- # @param email_notification_language [Symbol, Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationLanguage] The language used for the notification email content. One of "en" or "fr".
645
- #
646
663
  # @param email_notification_outcomes [Array<Symbol, Revox::Models::CallCreateResponse::Call::Assistant::EmailNotificationOutcome>, nil] Which call outcomes trigger an email notification. E.g. ["interested", "complete
647
664
  #
648
665
  # @param end_of_call_sentence [String, nil]
@@ -655,7 +672,7 @@ module Revox
655
672
  #
656
673
  # @param from_phone_number [String, nil] Override the default outbound phone number for calls placed with this assistant.
657
674
  #
658
- # @param human_transfer_mode [Symbol, Revox::Models::CallCreateResponse::Call::Assistant::HumanTransferMode, nil] Warm or cold transfer when transfer_phone_number is set; null when transfer is n
675
+ # @param human_transfer_mode [Symbol, Revox::Models::CallCreateResponse::Call::Assistant::HumanTransferMode, nil] Warm or cold transfer when transfer_destinations is non-empty; null when transfe
659
676
  #
660
677
  # @param ivr_navigation_enabled [Boolean] Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
661
678
  #
@@ -673,6 +690,8 @@ module Revox
673
690
  #
674
691
  # @param position [Revox::Models::CallCreateResponse::Call::Assistant::Position, nil]
675
692
  #
693
+ # @param precall_lookup_url [String, nil] URL fetched before an inbound call is answered to resolve the assistant's prompt
694
+ #
676
695
  # @param prompt [String]
677
696
  #
678
697
  # @param prompt_flow [Revox::Models::CallCreateResponse::Call::Assistant::PromptFlow, nil]
@@ -697,7 +716,7 @@ module Revox
697
716
  #
698
717
  # @param thinking_sound_volume [Float] Volume of the thinking sound (0 = silent, 1 = max).
699
718
  #
700
- # @param transfer_phone_number [String, nil] Phone number to transfer calls to when users request to speak to a human agent.
719
+ # @param transfer_destinations [Array<Revox::Models::CallCreateResponse::Call::Assistant::TransferDestination>, nil] Where calls can be transferred to when users ask to speak to a human. Null or em
701
720
  #
702
721
  # @param type [Symbol, Revox::Models::CallCreateResponse::Call::Assistant::Type]
703
722
  #
@@ -719,6 +738,8 @@ module Revox
719
738
  #
720
739
  # @param faq_items [Array<Revox::Models::CallCreateResponse::Call::Assistant::FaqItem>]
721
740
  #
741
+ # @param is_inbound_receptionist [Boolean]
742
+ #
722
743
  # @param is_realestate_assistant [Boolean]
723
744
  #
724
745
  # @param pending_faq_count [Float]
@@ -730,9 +751,6 @@ module Revox
730
751
  INTERESTED = :interested
731
752
  COMPLETED = :completed
732
753
  REQUESTED_CALLBACK_LATER = :requested_callback_later
733
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
734
- DO_NOT_CONTACT = :do_not_contact
735
- AI_AVERSE = :ai_averse
736
754
  NONE = :none
737
755
 
738
756
  # @!method self.values
@@ -865,7 +883,8 @@ module Revox
865
883
  required :calling_window_start_time, String
866
884
 
867
885
  # @!attribute retry_delay_seconds
868
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
886
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
887
+ # allows. Default: 7200 (2 hours).
869
888
  #
870
889
  # @return [Integer]
871
890
  required :retry_delay_seconds, Integer
@@ -879,7 +898,7 @@ module Revox
879
898
  #
880
899
  # @param calling_window_start_time [String] Start time for the calling window in the recipient's timezone (or timezone_overr
881
900
  #
882
- # @param retry_delay_seconds [Integer] Delay between retry attempts in seconds. Default: 7200 (2 hours).
901
+ # @param retry_delay_seconds [Integer] Delay between retry attempts in seconds. 0 retries as soon as the calling window
883
902
  end
884
903
  end
885
904
 
@@ -1062,19 +1081,6 @@ module Revox
1062
1081
  end
1063
1082
  end
1064
1083
 
1065
- # The language used for the notification email content. One of "en" or "fr".
1066
- #
1067
- # @see Revox::Models::CallCreateResponse::Call::Assistant#email_notification_language
1068
- module EmailNotificationLanguage
1069
- extend Revox::Internal::Type::Enum
1070
-
1071
- EN = :en
1072
- FR = :fr
1073
-
1074
- # @!method self.values
1075
- # @return [Array<Symbol>]
1076
- end
1077
-
1078
1084
  module EmailNotificationOutcome
1079
1085
  extend Revox::Internal::Type::Enum
1080
1086
 
@@ -1082,9 +1088,6 @@ module Revox
1082
1088
  INTERESTED = :interested
1083
1089
  COMPLETED = :completed
1084
1090
  REQUESTED_CALLBACK_LATER = :requested_callback_later
1085
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1086
- DO_NOT_CONTACT = :do_not_contact
1087
- AI_AVERSE = :ai_averse
1088
1091
  NONE = :none
1089
1092
 
1090
1093
  # @!method self.values
@@ -1103,8 +1106,8 @@ module Revox
1103
1106
  # @return [Array<Symbol>]
1104
1107
  end
1105
1108
 
1106
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1107
- # not configured.
1109
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
1110
+ # transfer is not configured.
1108
1111
  #
1109
1112
  # @see Revox::Models::CallCreateResponse::Call::Assistant#human_transfer_mode
1110
1113
  module HumanTransferMode
@@ -1394,11 +1397,14 @@ module Revox
1394
1397
 
1395
1398
  # @see Revox::Models::CallCreateResponse::Call::Assistant#slack
1396
1399
  class Slack < Revox::Internal::Type::BaseModel
1397
- # @!attribute channel_id
1398
- # The Slack channel ID where the notification will be posted.
1400
+ # @!attribute channels
1401
+ # The Slack channels eligible to receive the notification. When more than one is
1402
+ # configured, the agent prompt may define routing rules to narrow it down per
1403
+ # call; with no such rules every channel here is notified.
1399
1404
  #
1400
- # @return [String]
1401
- required :channel_id, String
1405
+ # @return [Array<Revox::Models::CallCreateResponse::Call::Assistant::Slack::Channel>]
1406
+ required :channels,
1407
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::Assistant::Slack::Channel] }
1402
1408
 
1403
1409
  # @!attribute connection_id
1404
1410
  # The Nango connection ID linking the org's Slack workspace to Revox.
@@ -1414,37 +1420,53 @@ module Revox
1414
1420
  required :outcomes,
1415
1421
  -> { Revox::Internal::Type::ArrayOf[enum: Revox::Models::CallCreateResponse::Call::Assistant::Slack::Outcome] }
1416
1422
 
1417
- # @!attribute channel_name
1418
- # Human-readable Slack channel name, cached for display in the UI.
1419
- #
1420
- # @return [String, nil]
1421
- optional :channel_name, String, nil?: true
1422
-
1423
1423
  # @!attribute template
1424
1424
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1425
1425
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
1426
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
1427
- # prompt_variables and structured_output keys. When null/empty a default template
1428
- # is used.
1426
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
1427
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
1428
+ # null/empty a default template is used.
1429
1429
  #
1430
1430
  # @return [String, nil]
1431
1431
  optional :template, String, nil?: true
1432
1432
 
1433
- # @!method initialize(channel_id:, connection_id:, outcomes:, channel_name: nil, template: nil)
1433
+ # @!method initialize(channels:, connection_id:, outcomes:, template: nil)
1434
1434
  # Some parameter documentations has been truncated, see
1435
1435
  # {Revox::Models::CallCreateResponse::Call::Assistant::Slack} for more details.
1436
1436
  #
1437
- # @param channel_id [String] The Slack channel ID where the notification will be posted.
1437
+ # @param channels [Array<Revox::Models::CallCreateResponse::Call::Assistant::Slack::Channel>] The Slack channels eligible to receive the notification. When more than one is c
1438
1438
  #
1439
1439
  # @param connection_id [String] The Nango connection ID linking the org's Slack workspace to Revox.
1440
1440
  #
1441
1441
  # @param outcomes [Array<Symbol, Revox::Models::CallCreateResponse::Call::Assistant::Slack::Outcome>] Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
1442
1442
  #
1443
- # @param channel_name [String, nil] Human-readable Slack channel name, cached for display in the UI.
1444
- #
1445
1443
  # @param template [String, nil] Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1446
1444
  # {{call\_
1447
1445
 
1446
+ class Channel < Revox::Internal::Type::BaseModel
1447
+ # @!attribute id
1448
+ # The Slack channel ID (e.g. 'C01234567').
1449
+ #
1450
+ # @return [String]
1451
+ required :id, String
1452
+
1453
+ # @!attribute name
1454
+ # Human-readable Slack channel name, cached for display in the UI and given to the
1455
+ # LLM when the agent prompt routes by channel name.
1456
+ #
1457
+ # @return [String, nil]
1458
+ optional :name, String, nil?: true
1459
+
1460
+ # @!method initialize(id:, name: nil)
1461
+ # Some parameter documentations has been truncated, see
1462
+ # {Revox::Models::CallCreateResponse::Call::Assistant::Slack::Channel} for more
1463
+ # details.
1464
+ #
1465
+ # @param id [String] The Slack channel ID (e.g. 'C01234567').
1466
+ #
1467
+ # @param name [String, nil] Human-readable Slack channel name, cached for display in the UI and given to the
1468
+ end
1469
+
1448
1470
  module Outcome
1449
1471
  extend Revox::Internal::Type::Enum
1450
1472
 
@@ -1452,9 +1474,6 @@ module Revox
1452
1474
  INTERESTED = :interested
1453
1475
  COMPLETED = :completed
1454
1476
  REQUESTED_CALLBACK_LATER = :requested_callback_later
1455
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1456
- DO_NOT_CONTACT = :do_not_contact
1457
- AI_AVERSE = :ai_averse
1458
1477
  NONE = :none
1459
1478
 
1460
1479
  # @!method self.values
@@ -1582,6 +1601,22 @@ module Revox
1582
1601
  # @return [Array<Symbol>]
1583
1602
  end
1584
1603
 
1604
+ class TransferDestination < Revox::Internal::Type::BaseModel
1605
+ # @!attribute label
1606
+ #
1607
+ # @return [String]
1608
+ required :label, String
1609
+
1610
+ # @!attribute phone_number
1611
+ #
1612
+ # @return [String]
1613
+ required :phone_number, String
1614
+
1615
+ # @!method initialize(label:, phone_number:)
1616
+ # @param label [String]
1617
+ # @param phone_number [String]
1618
+ end
1619
+
1585
1620
  # @see Revox::Models::CallCreateResponse::Call::Assistant#type
1586
1621
  module Type
1587
1622
  extend Revox::Internal::Type::Enum
@@ -1617,7 +1652,7 @@ module Revox
1617
1652
 
1618
1653
  # @!attribute speed
1619
1654
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
1620
- # 0.7–1.2. Default is 1.0.
1655
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
1621
1656
  #
1622
1657
  # @return [Float, nil]
1623
1658
  optional :speed, Float
@@ -1651,6 +1686,7 @@ module Revox
1651
1686
 
1652
1687
  CARTESIA = :cartesia
1653
1688
  ELEVENLABS = :elevenlabs
1689
+ GRADIUM = :gradium
1654
1690
 
1655
1691
  # @!method self.values
1656
1692
  # @return [Array<Symbol>]
@@ -1765,9 +1801,6 @@ module Revox
1765
1801
  INTERESTED = :interested
1766
1802
  COMPLETED = :completed
1767
1803
  REQUESTED_CALLBACK_LATER = :requested_callback_later
1768
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1769
- DO_NOT_CONTACT = :do_not_contact
1770
- AI_AVERSE = :ai_averse
1771
1804
  NONE = :none
1772
1805
 
1773
1806
  # @!method self.values
@@ -1883,6 +1916,29 @@ module Revox
1883
1916
  # @return [Object]
1884
1917
  required :ended_at, Revox::Internal::Type::Unknown
1885
1918
 
1919
+ # @!attribute handled_by_ai
1920
+ # Whether the AI agent conducted the conversation on this attempt. False for a
1921
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
1922
+ # were never answered.
1923
+ #
1924
+ # @return [Boolean]
1925
+ required :handled_by_ai, Revox::Internal::Type::Boolean
1926
+
1927
+ # @!attribute handled_by_human
1928
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
1929
+ # or a speed-dial operator connection (both stamp human_takeover_at).
1930
+ #
1931
+ # @return [Boolean]
1932
+ required :handled_by_human, Revox::Internal::Type::Boolean
1933
+
1934
+ # @!attribute handled_by_user
1935
+ # The team member responsible for following up on this call.
1936
+ #
1937
+ # @return [Revox::Models::CallCreateResponse::Call::CallAttempt::HandledByUser, nil]
1938
+ required :handled_by_user,
1939
+ -> { Revox::Models::CallCreateResponse::Call::CallAttempt::HandledByUser },
1940
+ nil?: true
1941
+
1886
1942
  # @!attribute phone_number
1887
1943
  # The phone number that was called. Formatted in E.164 format. Example:
1888
1944
  # +1234567890
@@ -1919,6 +1975,15 @@ module Revox
1919
1975
  # @return [Array<String>, nil]
1920
1976
  optional :assistants_used, Revox::Internal::Type::ArrayOf[String], nil?: true
1921
1977
 
1978
+ # @!attribute email_log
1979
+ # Notification emails sent in connection with the call, ordered oldest first
1980
+ # (from/to addresses, subject, sent time).
1981
+ #
1982
+ # @return [Array<Revox::Models::CallCreateResponse::Call::CallAttempt::EmailLog>, nil]
1983
+ optional :email_log,
1984
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::CallAttempt::EmailLog] },
1985
+ nil?: true
1986
+
1922
1987
  # @!attribute end_reason
1923
1988
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
1924
1989
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
@@ -1954,6 +2019,16 @@ module Revox
1954
2019
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog] },
1955
2020
  nil?: true
1956
2021
 
2022
+ # @!attribute speech_events
2023
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
2024
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
2025
+ # tracked or for realtime sessions that don't emit them.
2026
+ #
2027
+ # @return [Array<Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent>, nil]
2028
+ optional :speech_events,
2029
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent] },
2030
+ nil?: true
2031
+
1957
2032
  # @!attribute structured_output
1958
2033
  # The data extracted from the call, using the structured output config from the
1959
2034
  # parent call object.
@@ -1971,7 +2046,7 @@ module Revox
1971
2046
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::CallAttempt::Transcript] },
1972
2047
  nil?: true
1973
2048
 
1974
- # @!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)
2049
+ # @!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)
1975
2050
  # Some parameter documentations has been truncated, see
1976
2051
  # {Revox::Models::CallCreateResponse::Call::CallAttempt} for more details.
1977
2052
  #
@@ -1986,6 +2061,12 @@ module Revox
1986
2061
  #
1987
2062
  # @param ended_at [Object] The time the call ended.
1988
2063
  #
2064
+ # @param handled_by_ai [Boolean] Whether the AI agent conducted the conversation on this attempt. False for a sil
2065
+ #
2066
+ # @param handled_by_human [Boolean] Whether a human operator conducted (part of) this attempt — a jump-in takeover o
2067
+ #
2068
+ # @param handled_by_user [Revox::Models::CallCreateResponse::Call::CallAttempt::HandledByUser, nil] The team member responsible for following up on this call.
2069
+ #
1989
2070
  # @param phone_number [String] The phone number that was called. Formatted in E.164 format. Example: +123456789
1990
2071
  #
1991
2072
  # @param recording_url [String, nil] The URL of the audio recording of the call.
@@ -1998,6 +2079,8 @@ module Revox
1998
2079
  #
1999
2080
  # @param assistants_used [Array<String>, nil] Assistant node ids entered during this attempt, in traversal order.
2000
2081
  #
2082
+ # @param email_log [Array<Revox::Models::CallCreateResponse::Call::CallAttempt::EmailLog>, nil] Notification emails sent in connection with the call, ordered oldest first (from
2083
+ #
2001
2084
  # @param end_reason [Symbol, Revox::Models::CallCreateResponse::Call::CallAttempt::EndReason, nil] Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voic
2002
2085
  #
2003
2086
  # @param ended_by [Symbol, Revox::Models::CallCreateResponse::Call::CallAttempt::EndedBy, nil] Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or 'syst
@@ -2006,6 +2089,8 @@ module Revox
2006
2089
  #
2007
2090
  # @param sms_log [Array<Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog>, nil] Automatic SMS sent after the call (voicemail and after-call), ordered oldest fir
2008
2091
  #
2092
+ # @param speech_events [Array<Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent>, nil] Per-turn speech segments (VAD-derived) with timing and pipeline latencies, order
2093
+ #
2009
2094
  # @param structured_output [Hash{Symbol=>Object}, nil] The data extracted from the call, using the structured output config from the pa
2010
2095
  #
2011
2096
  # @param transcript [Array<Revox::Models::CallCreateResponse::Call::CallAttempt::Transcript>, nil] The live transcript of the call, built in real time.
@@ -2029,6 +2114,41 @@ module Revox
2029
2114
  # @return [Array<Symbol>]
2030
2115
  end
2031
2116
 
2117
+ # @see Revox::Models::CallCreateResponse::Call::CallAttempt#handled_by_user
2118
+ class HandledByUser < Revox::Internal::Type::BaseModel
2119
+ # @!attribute id
2120
+ # The database user id of the assignee.
2121
+ #
2122
+ # @return [String]
2123
+ required :id, String
2124
+
2125
+ # @!attribute email
2126
+ #
2127
+ # @return [String]
2128
+ required :email, String
2129
+
2130
+ # @!attribute first_name
2131
+ #
2132
+ # @return [String, nil]
2133
+ required :first_name, String, nil?: true
2134
+
2135
+ # @!attribute last_name
2136
+ #
2137
+ # @return [String, nil]
2138
+ required :last_name, String, nil?: true
2139
+
2140
+ # @!method initialize(id:, email:, first_name:, last_name:)
2141
+ # The team member responsible for following up on this call.
2142
+ #
2143
+ # @param id [String] The database user id of the assignee.
2144
+ #
2145
+ # @param email [String]
2146
+ #
2147
+ # @param first_name [String, nil]
2148
+ #
2149
+ # @param last_name [String, nil]
2150
+ end
2151
+
2032
2152
  # @see Revox::Models::CallCreateResponse::Call::CallAttempt#result
2033
2153
  module Result
2034
2154
  extend Revox::Internal::Type::Enum
@@ -2059,6 +2179,52 @@ module Revox
2059
2179
  # @return [Array<Symbol>]
2060
2180
  end
2061
2181
 
2182
+ class EmailLog < Revox::Internal::Type::BaseModel
2183
+ # @!attribute id
2184
+ #
2185
+ # @return [String]
2186
+ required :id, String
2187
+
2188
+ # @!attribute created_at
2189
+ # When the email was sent.
2190
+ #
2191
+ # @return [Object]
2192
+ required :created_at, Revox::Internal::Type::Unknown
2193
+
2194
+ # @!attribute from_address
2195
+ #
2196
+ # @return [String]
2197
+ required :from_address, String
2198
+
2199
+ # @!attribute resend_message_id
2200
+ #
2201
+ # @return [String, nil]
2202
+ required :resend_message_id, String, nil?: true
2203
+
2204
+ # @!attribute subject
2205
+ #
2206
+ # @return [String]
2207
+ required :subject, String
2208
+
2209
+ # @!attribute to_emails
2210
+ #
2211
+ # @return [Array<String>]
2212
+ required :to_emails, Revox::Internal::Type::ArrayOf[String]
2213
+
2214
+ # @!method initialize(id:, created_at:, from_address:, resend_message_id:, subject:, to_emails:)
2215
+ # @param id [String]
2216
+ #
2217
+ # @param created_at [Object] When the email was sent.
2218
+ #
2219
+ # @param from_address [String]
2220
+ #
2221
+ # @param resend_message_id [String, nil]
2222
+ #
2223
+ # @param subject [String]
2224
+ #
2225
+ # @param to_emails [Array<String>]
2226
+ end
2227
+
2062
2228
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
2063
2229
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
2064
2230
  #
@@ -2189,34 +2355,52 @@ module Revox
2189
2355
  # @return [String]
2190
2356
  required :message_body, String
2191
2357
 
2192
- # @!attribute to_phone_number
2358
+ # @!attribute provider
2193
2359
  #
2194
- # @return [String]
2195
- required :to_phone_number, String
2360
+ # @return [Symbol, Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider]
2361
+ required :provider, enum: -> { Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider }
2196
2362
 
2197
- # @!attribute twilio_message_sid
2363
+ # @!attribute provider_message_id
2198
2364
  #
2199
2365
  # @return [String, nil]
2200
- required :twilio_message_sid, String, nil?: true
2366
+ required :provider_message_id, String, nil?: true
2367
+
2368
+ # @!attribute to_phone_number
2369
+ #
2370
+ # @return [String]
2371
+ required :to_phone_number, String
2201
2372
 
2202
2373
  # @!attribute type
2203
2374
  #
2204
2375
  # @return [Symbol, Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Type]
2205
2376
  required :type, enum: -> { Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Type }
2206
2377
 
2207
- # @!method initialize(id:, created_at:, message_body:, to_phone_number:, twilio_message_sid:, type:)
2378
+ # @!method initialize(id:, created_at:, message_body:, provider:, provider_message_id:, to_phone_number:, type:)
2208
2379
  # @param id [String]
2209
2380
  #
2210
2381
  # @param created_at [Object] When the SMS was sent.
2211
2382
  #
2212
2383
  # @param message_body [String]
2213
2384
  #
2214
- # @param to_phone_number [String]
2385
+ # @param provider [Symbol, Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Provider]
2386
+ #
2387
+ # @param provider_message_id [String, nil]
2215
2388
  #
2216
- # @param twilio_message_sid [String, nil]
2389
+ # @param to_phone_number [String]
2217
2390
  #
2218
2391
  # @param type [Symbol, Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog::Type]
2219
2392
 
2393
+ # @see Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog#provider
2394
+ module Provider
2395
+ extend Revox::Internal::Type::Enum
2396
+
2397
+ TWILIO = :twilio
2398
+ VONAGE = :vonage
2399
+
2400
+ # @!method self.values
2401
+ # @return [Array<Symbol>]
2402
+ end
2403
+
2220
2404
  # @see Revox::Models::CallCreateResponse::Call::CallAttempt::SMSLog#type
2221
2405
  module Type
2222
2406
  extend Revox::Internal::Type::Enum
@@ -2230,6 +2414,125 @@ module Revox
2230
2414
  end
2231
2415
  end
2232
2416
 
2417
+ class SpeechEvent < Revox::Internal::Type::BaseModel
2418
+ # @!attribute id
2419
+ #
2420
+ # @return [String]
2421
+ required :id, String
2422
+
2423
+ # @!attribute is_real_turn
2424
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
2425
+ #
2426
+ # @return [Boolean]
2427
+ required :is_real_turn, Revox::Internal::Type::Boolean
2428
+
2429
+ # @!attribute llm_system_prompt
2430
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
2431
+ # system instructions plus conversation history — as JSON.
2432
+ #
2433
+ # @return [String, nil]
2434
+ required :llm_system_prompt, String, nil?: true
2435
+
2436
+ # @!attribute llm_ttft_ms
2437
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
2438
+ #
2439
+ # @return [Float, nil]
2440
+ required :llm_ttft_ms, Float, nil?: true
2441
+
2442
+ # @!attribute llm_winner_model
2443
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
2444
+ # a race, which is also the model `llm_ttft_ms` describes.
2445
+ #
2446
+ # @return [String, nil]
2447
+ required :llm_winner_model, String, nil?: true
2448
+
2449
+ # @!attribute speaker
2450
+ # Who was speaking during this segment.
2451
+ #
2452
+ # @return [Symbol, Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker]
2453
+ required :speaker, enum: -> { Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker }
2454
+
2455
+ # @!attribute started_speaking_at_ms
2456
+ # Milliseconds since session start when speech began.
2457
+ #
2458
+ # @return [Float]
2459
+ required :started_speaking_at_ms, Float
2460
+
2461
+ # @!attribute stopped_speaking_at_ms
2462
+ # Milliseconds since session start when speech ended. Null when the session ended
2463
+ # before the turn closed.
2464
+ #
2465
+ # @return [Float, nil]
2466
+ required :stopped_speaking_at_ms, Float, nil?: true
2467
+
2468
+ # @!attribute stt_transcription_delay_ms
2469
+ # User-only: time from end-of-speech to final transcript, in ms.
2470
+ #
2471
+ # @return [Float, nil]
2472
+ required :stt_transcription_delay_ms, Float, nil?: true
2473
+
2474
+ # @!attribute transcript
2475
+ # Recognized text for this segment, when available.
2476
+ #
2477
+ # @return [String, nil]
2478
+ required :transcript, String, nil?: true
2479
+
2480
+ # @!attribute tts_ttfb_ms
2481
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
2482
+ #
2483
+ # @return [Float, nil]
2484
+ required :tts_ttfb_ms, Float, nil?: true
2485
+
2486
+ # @!attribute was_cut
2487
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
2488
+ # Null on user segments.
2489
+ #
2490
+ # @return [Boolean, nil]
2491
+ required :was_cut, Revox::Internal::Type::Boolean, nil?: true
2492
+
2493
+ # @!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:)
2494
+ # Some parameter documentations has been truncated, see
2495
+ # {Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent} for more
2496
+ # details.
2497
+ #
2498
+ # @param id [String]
2499
+ #
2500
+ # @param is_real_turn [Boolean] False when the segment was flagged as noise/blip rather than a meaningful turn.
2501
+ #
2502
+ # @param llm_system_prompt [String, nil] Agent-only: despite the name, the whole prompt the LLM was given for this turn —
2503
+ #
2504
+ # @param llm_ttft_ms [Float, nil] Agent-only: LLM time-to-first-token for the reply, in ms.
2505
+ #
2506
+ # @param llm_winner_model [String, nil] Agent-only: the model that produced the reply — the winning leg when the LLM is
2507
+ #
2508
+ # @param speaker [Symbol, Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent::Speaker] Who was speaking during this segment.
2509
+ #
2510
+ # @param started_speaking_at_ms [Float] Milliseconds since session start when speech began.
2511
+ #
2512
+ # @param stopped_speaking_at_ms [Float, nil] Milliseconds since session start when speech ended. Null when the session ended
2513
+ #
2514
+ # @param stt_transcription_delay_ms [Float, nil] User-only: time from end-of-speech to final transcript, in ms.
2515
+ #
2516
+ # @param transcript [String, nil] Recognized text for this segment, when available.
2517
+ #
2518
+ # @param tts_ttfb_ms [Float, nil] Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
2519
+ #
2520
+ # @param was_cut [Boolean, nil] Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
2521
+
2522
+ # Who was speaking during this segment.
2523
+ #
2524
+ # @see Revox::Models::CallCreateResponse::Call::CallAttempt::SpeechEvent#speaker
2525
+ module Speaker
2526
+ extend Revox::Internal::Type::Enum
2527
+
2528
+ USER = :user
2529
+ AGENT = :agent
2530
+
2531
+ # @!method self.values
2532
+ # @return [Array<Symbol>]
2533
+ end
2534
+ end
2535
+
2233
2536
  class Transcript < Revox::Internal::Type::BaseModel
2234
2537
  # @!attribute content
2235
2538
  #
@@ -2389,7 +2692,8 @@ module Revox
2389
2692
  required :calling_window_start_time, String
2390
2693
 
2391
2694
  # @!attribute retry_delay_seconds
2392
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
2695
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
2696
+ # allows. Default: 7200 (2 hours).
2393
2697
  #
2394
2698
  # @return [Integer]
2395
2699
  required :retry_delay_seconds, Integer
@@ -2403,7 +2707,7 @@ module Revox
2403
2707
  #
2404
2708
  # @param calling_window_start_time [String] Start time for the calling window in the recipient's timezone (or timezone_overr
2405
2709
  #
2406
- # @param retry_delay_seconds [Integer] Delay between retry attempts in seconds. Default: 7200 (2 hours).
2710
+ # @param retry_delay_seconds [Integer] Delay between retry attempts in seconds. 0 retries as soon as the calling window
2407
2711
  end
2408
2712
  end
2409
2713
 
@@ -2441,18 +2745,24 @@ module Revox
2441
2745
  # @return [String, nil]
2442
2746
  required :first_name, String, nil?: true
2443
2747
 
2748
+ # @!attribute job_title
2749
+ #
2750
+ # @return [String, nil]
2751
+ required :job_title, String, nil?: true
2752
+
2444
2753
  # @!attribute last_name
2445
2754
  #
2446
2755
  # @return [String, nil]
2447
2756
  required :last_name, String, nil?: true
2448
2757
 
2449
- # @!method initialize(company:, email:, first_name:, last_name:)
2758
+ # @!method initialize(company:, email:, first_name:, job_title:, last_name:)
2450
2759
  # Magic contact variables (prospect identity) extracted from the call's input data
2451
2760
  # and transcript.
2452
2761
  #
2453
2762
  # @param company [String, nil]
2454
2763
  # @param email [String, nil]
2455
2764
  # @param first_name [String, nil]
2765
+ # @param job_title [String, nil]
2456
2766
  # @param last_name [String, nil]
2457
2767
  end
2458
2768
 
@@ -2497,6 +2807,29 @@ module Revox
2497
2807
  # @return [Object]
2498
2808
  required :ended_at, Revox::Internal::Type::Unknown
2499
2809
 
2810
+ # @!attribute handled_by_ai
2811
+ # Whether the AI agent conducted the conversation on this attempt. False for a
2812
+ # silent speed-dial probe (whose agent only detects a human) and for attempts that
2813
+ # were never answered.
2814
+ #
2815
+ # @return [Boolean]
2816
+ required :handled_by_ai, Revox::Internal::Type::Boolean
2817
+
2818
+ # @!attribute handled_by_human
2819
+ # Whether a human operator conducted (part of) this attempt — a jump-in takeover
2820
+ # or a speed-dial operator connection (both stamp human_takeover_at).
2821
+ #
2822
+ # @return [Boolean]
2823
+ required :handled_by_human, Revox::Internal::Type::Boolean
2824
+
2825
+ # @!attribute handled_by_user
2826
+ # The team member responsible for following up on this call.
2827
+ #
2828
+ # @return [Revox::Models::CallCreateResponse::Call::LastCallAttempt::HandledByUser, nil]
2829
+ required :handled_by_user,
2830
+ -> { Revox::Models::CallCreateResponse::Call::LastCallAttempt::HandledByUser },
2831
+ nil?: true
2832
+
2500
2833
  # @!attribute phone_number
2501
2834
  # The phone number that was called. Formatted in E.164 format. Example:
2502
2835
  # +1234567890
@@ -2535,6 +2868,15 @@ module Revox
2535
2868
  # @return [Array<String>, nil]
2536
2869
  optional :assistants_used, Revox::Internal::Type::ArrayOf[String], nil?: true
2537
2870
 
2871
+ # @!attribute email_log
2872
+ # Notification emails sent in connection with the call, ordered oldest first
2873
+ # (from/to addresses, subject, sent time).
2874
+ #
2875
+ # @return [Array<Revox::Models::CallCreateResponse::Call::LastCallAttempt::EmailLog>, nil]
2876
+ optional :email_log,
2877
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::LastCallAttempt::EmailLog] },
2878
+ nil?: true
2879
+
2538
2880
  # @!attribute end_reason
2539
2881
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
2540
2882
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
@@ -2572,6 +2914,16 @@ module Revox
2572
2914
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog] },
2573
2915
  nil?: true
2574
2916
 
2917
+ # @!attribute speech_events
2918
+ # Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
2919
+ # ordered by started_speaking_at_ms. Empty for calls recorded before this was
2920
+ # tracked or for realtime sessions that don't emit them.
2921
+ #
2922
+ # @return [Array<Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent>, nil]
2923
+ optional :speech_events,
2924
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent] },
2925
+ nil?: true
2926
+
2575
2927
  # @!attribute structured_output
2576
2928
  # The data extracted from the call, using the structured output config from the
2577
2929
  # parent call object.
@@ -2589,7 +2941,7 @@ module Revox
2589
2941
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CallCreateResponse::Call::LastCallAttempt::Transcript] },
2590
2942
  nil?: true
2591
2943
 
2592
- # @!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)
2944
+ # @!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)
2593
2945
  # Some parameter documentations has been truncated, see
2594
2946
  # {Revox::Models::CallCreateResponse::Call::LastCallAttempt} for more details.
2595
2947
  #
@@ -2604,6 +2956,12 @@ module Revox
2604
2956
  #
2605
2957
  # @param ended_at [Object] The time the call ended.
2606
2958
  #
2959
+ # @param handled_by_ai [Boolean] Whether the AI agent conducted the conversation on this attempt. False for a sil
2960
+ #
2961
+ # @param handled_by_human [Boolean] Whether a human operator conducted (part of) this attempt — a jump-in takeover o
2962
+ #
2963
+ # @param handled_by_user [Revox::Models::CallCreateResponse::Call::LastCallAttempt::HandledByUser, nil] The team member responsible for following up on this call.
2964
+ #
2607
2965
  # @param phone_number [String] The phone number that was called. Formatted in E.164 format. Example: +123456789
2608
2966
  #
2609
2967
  # @param recording_url [String, nil] The URL of the audio recording of the call.
@@ -2616,6 +2974,8 @@ module Revox
2616
2974
  #
2617
2975
  # @param assistants_used [Array<String>, nil] Assistant node ids entered during this attempt, in traversal order.
2618
2976
  #
2977
+ # @param email_log [Array<Revox::Models::CallCreateResponse::Call::LastCallAttempt::EmailLog>, nil] Notification emails sent in connection with the call, ordered oldest first (from
2978
+ #
2619
2979
  # @param end_reason [Symbol, Revox::Models::CallCreateResponse::Call::LastCallAttempt::EndReason, nil] Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voic
2620
2980
  #
2621
2981
  # @param ended_by [Symbol, Revox::Models::CallCreateResponse::Call::LastCallAttempt::EndedBy, nil] Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or 'syst
@@ -2624,6 +2984,8 @@ module Revox
2624
2984
  #
2625
2985
  # @param sms_log [Array<Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog>, nil] Automatic SMS sent after the call (voicemail and after-call), ordered oldest fir
2626
2986
  #
2987
+ # @param speech_events [Array<Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent>, nil] Per-turn speech segments (VAD-derived) with timing and pipeline latencies, order
2988
+ #
2627
2989
  # @param structured_output [Hash{Symbol=>Object}, nil] The data extracted from the call, using the structured output config from the pa
2628
2990
  #
2629
2991
  # @param transcript [Array<Revox::Models::CallCreateResponse::Call::LastCallAttempt::Transcript>, nil] The live transcript of the call, built in real time.
@@ -2647,6 +3009,41 @@ module Revox
2647
3009
  # @return [Array<Symbol>]
2648
3010
  end
2649
3011
 
3012
+ # @see Revox::Models::CallCreateResponse::Call::LastCallAttempt#handled_by_user
3013
+ class HandledByUser < Revox::Internal::Type::BaseModel
3014
+ # @!attribute id
3015
+ # The database user id of the assignee.
3016
+ #
3017
+ # @return [String]
3018
+ required :id, String
3019
+
3020
+ # @!attribute email
3021
+ #
3022
+ # @return [String]
3023
+ required :email, String
3024
+
3025
+ # @!attribute first_name
3026
+ #
3027
+ # @return [String, nil]
3028
+ required :first_name, String, nil?: true
3029
+
3030
+ # @!attribute last_name
3031
+ #
3032
+ # @return [String, nil]
3033
+ required :last_name, String, nil?: true
3034
+
3035
+ # @!method initialize(id:, email:, first_name:, last_name:)
3036
+ # The team member responsible for following up on this call.
3037
+ #
3038
+ # @param id [String] The database user id of the assignee.
3039
+ #
3040
+ # @param email [String]
3041
+ #
3042
+ # @param first_name [String, nil]
3043
+ #
3044
+ # @param last_name [String, nil]
3045
+ end
3046
+
2650
3047
  # @see Revox::Models::CallCreateResponse::Call::LastCallAttempt#result
2651
3048
  module Result
2652
3049
  extend Revox::Internal::Type::Enum
@@ -2677,6 +3074,52 @@ module Revox
2677
3074
  # @return [Array<Symbol>]
2678
3075
  end
2679
3076
 
3077
+ class EmailLog < Revox::Internal::Type::BaseModel
3078
+ # @!attribute id
3079
+ #
3080
+ # @return [String]
3081
+ required :id, String
3082
+
3083
+ # @!attribute created_at
3084
+ # When the email was sent.
3085
+ #
3086
+ # @return [Object]
3087
+ required :created_at, Revox::Internal::Type::Unknown
3088
+
3089
+ # @!attribute from_address
3090
+ #
3091
+ # @return [String]
3092
+ required :from_address, String
3093
+
3094
+ # @!attribute resend_message_id
3095
+ #
3096
+ # @return [String, nil]
3097
+ required :resend_message_id, String, nil?: true
3098
+
3099
+ # @!attribute subject
3100
+ #
3101
+ # @return [String]
3102
+ required :subject, String
3103
+
3104
+ # @!attribute to_emails
3105
+ #
3106
+ # @return [Array<String>]
3107
+ required :to_emails, Revox::Internal::Type::ArrayOf[String]
3108
+
3109
+ # @!method initialize(id:, created_at:, from_address:, resend_message_id:, subject:, to_emails:)
3110
+ # @param id [String]
3111
+ #
3112
+ # @param created_at [Object] When the email was sent.
3113
+ #
3114
+ # @param from_address [String]
3115
+ #
3116
+ # @param resend_message_id [String, nil]
3117
+ #
3118
+ # @param subject [String]
3119
+ #
3120
+ # @param to_emails [Array<String>]
3121
+ end
3122
+
2680
3123
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
2681
3124
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
2682
3125
  #
@@ -2807,34 +3250,53 @@ module Revox
2807
3250
  # @return [String]
2808
3251
  required :message_body, String
2809
3252
 
2810
- # @!attribute to_phone_number
3253
+ # @!attribute provider
2811
3254
  #
2812
- # @return [String]
2813
- required :to_phone_number, String
3255
+ # @return [Symbol, Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider]
3256
+ required :provider,
3257
+ enum: -> { Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider }
2814
3258
 
2815
- # @!attribute twilio_message_sid
3259
+ # @!attribute provider_message_id
2816
3260
  #
2817
3261
  # @return [String, nil]
2818
- required :twilio_message_sid, String, nil?: true
3262
+ required :provider_message_id, String, nil?: true
3263
+
3264
+ # @!attribute to_phone_number
3265
+ #
3266
+ # @return [String]
3267
+ required :to_phone_number, String
2819
3268
 
2820
3269
  # @!attribute type
2821
3270
  #
2822
3271
  # @return [Symbol, Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Type]
2823
3272
  required :type, enum: -> { Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Type }
2824
3273
 
2825
- # @!method initialize(id:, created_at:, message_body:, to_phone_number:, twilio_message_sid:, type:)
3274
+ # @!method initialize(id:, created_at:, message_body:, provider:, provider_message_id:, to_phone_number:, type:)
2826
3275
  # @param id [String]
2827
3276
  #
2828
3277
  # @param created_at [Object] When the SMS was sent.
2829
3278
  #
2830
3279
  # @param message_body [String]
2831
3280
  #
2832
- # @param to_phone_number [String]
3281
+ # @param provider [Symbol, Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Provider]
3282
+ #
3283
+ # @param provider_message_id [String, nil]
2833
3284
  #
2834
- # @param twilio_message_sid [String, nil]
3285
+ # @param to_phone_number [String]
2835
3286
  #
2836
3287
  # @param type [Symbol, Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog::Type]
2837
3288
 
3289
+ # @see Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog#provider
3290
+ module Provider
3291
+ extend Revox::Internal::Type::Enum
3292
+
3293
+ TWILIO = :twilio
3294
+ VONAGE = :vonage
3295
+
3296
+ # @!method self.values
3297
+ # @return [Array<Symbol>]
3298
+ end
3299
+
2838
3300
  # @see Revox::Models::CallCreateResponse::Call::LastCallAttempt::SMSLog#type
2839
3301
  module Type
2840
3302
  extend Revox::Internal::Type::Enum
@@ -2848,6 +3310,126 @@ module Revox
2848
3310
  end
2849
3311
  end
2850
3312
 
3313
+ class SpeechEvent < Revox::Internal::Type::BaseModel
3314
+ # @!attribute id
3315
+ #
3316
+ # @return [String]
3317
+ required :id, String
3318
+
3319
+ # @!attribute is_real_turn
3320
+ # False when the segment was flagged as noise/blip rather than a meaningful turn.
3321
+ #
3322
+ # @return [Boolean]
3323
+ required :is_real_turn, Revox::Internal::Type::Boolean
3324
+
3325
+ # @!attribute llm_system_prompt
3326
+ # Agent-only: despite the name, the whole prompt the LLM was given for this turn —
3327
+ # system instructions plus conversation history — as JSON.
3328
+ #
3329
+ # @return [String, nil]
3330
+ required :llm_system_prompt, String, nil?: true
3331
+
3332
+ # @!attribute llm_ttft_ms
3333
+ # Agent-only: LLM time-to-first-token for the reply, in ms.
3334
+ #
3335
+ # @return [Float, nil]
3336
+ required :llm_ttft_ms, Float, nil?: true
3337
+
3338
+ # @!attribute llm_winner_model
3339
+ # Agent-only: the model that produced the reply — the winning leg when the LLM is
3340
+ # a race, which is also the model `llm_ttft_ms` describes.
3341
+ #
3342
+ # @return [String, nil]
3343
+ required :llm_winner_model, String, nil?: true
3344
+
3345
+ # @!attribute speaker
3346
+ # Who was speaking during this segment.
3347
+ #
3348
+ # @return [Symbol, Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker]
3349
+ required :speaker,
3350
+ enum: -> { Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker }
3351
+
3352
+ # @!attribute started_speaking_at_ms
3353
+ # Milliseconds since session start when speech began.
3354
+ #
3355
+ # @return [Float]
3356
+ required :started_speaking_at_ms, Float
3357
+
3358
+ # @!attribute stopped_speaking_at_ms
3359
+ # Milliseconds since session start when speech ended. Null when the session ended
3360
+ # before the turn closed.
3361
+ #
3362
+ # @return [Float, nil]
3363
+ required :stopped_speaking_at_ms, Float, nil?: true
3364
+
3365
+ # @!attribute stt_transcription_delay_ms
3366
+ # User-only: time from end-of-speech to final transcript, in ms.
3367
+ #
3368
+ # @return [Float, nil]
3369
+ required :stt_transcription_delay_ms, Float, nil?: true
3370
+
3371
+ # @!attribute transcript
3372
+ # Recognized text for this segment, when available.
3373
+ #
3374
+ # @return [String, nil]
3375
+ required :transcript, String, nil?: true
3376
+
3377
+ # @!attribute tts_ttfb_ms
3378
+ # Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
3379
+ #
3380
+ # @return [Float, nil]
3381
+ required :tts_ttfb_ms, Float, nil?: true
3382
+
3383
+ # @!attribute was_cut
3384
+ # Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
3385
+ # Null on user segments.
3386
+ #
3387
+ # @return [Boolean, nil]
3388
+ required :was_cut, Revox::Internal::Type::Boolean, nil?: true
3389
+
3390
+ # @!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:)
3391
+ # Some parameter documentations has been truncated, see
3392
+ # {Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent} for more
3393
+ # details.
3394
+ #
3395
+ # @param id [String]
3396
+ #
3397
+ # @param is_real_turn [Boolean] False when the segment was flagged as noise/blip rather than a meaningful turn.
3398
+ #
3399
+ # @param llm_system_prompt [String, nil] Agent-only: despite the name, the whole prompt the LLM was given for this turn —
3400
+ #
3401
+ # @param llm_ttft_ms [Float, nil] Agent-only: LLM time-to-first-token for the reply, in ms.
3402
+ #
3403
+ # @param llm_winner_model [String, nil] Agent-only: the model that produced the reply — the winning leg when the LLM is
3404
+ #
3405
+ # @param speaker [Symbol, Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent::Speaker] Who was speaking during this segment.
3406
+ #
3407
+ # @param started_speaking_at_ms [Float] Milliseconds since session start when speech began.
3408
+ #
3409
+ # @param stopped_speaking_at_ms [Float, nil] Milliseconds since session start when speech ended. Null when the session ended
3410
+ #
3411
+ # @param stt_transcription_delay_ms [Float, nil] User-only: time from end-of-speech to final transcript, in ms.
3412
+ #
3413
+ # @param transcript [String, nil] Recognized text for this segment, when available.
3414
+ #
3415
+ # @param tts_ttfb_ms [Float, nil] Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
3416
+ #
3417
+ # @param was_cut [Boolean, nil] Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
3418
+
3419
+ # Who was speaking during this segment.
3420
+ #
3421
+ # @see Revox::Models::CallCreateResponse::Call::LastCallAttempt::SpeechEvent#speaker
3422
+ module Speaker
3423
+ extend Revox::Internal::Type::Enum
3424
+
3425
+ USER = :user
3426
+ AGENT = :agent
3427
+
3428
+ # @!method self.values
3429
+ # @return [Array<Symbol>]
3430
+ end
3431
+ end
3432
+
2851
3433
  class Transcript < Revox::Internal::Type::BaseModel
2852
3434
  # @!attribute content
2853
3435
  #
@@ -3081,6 +3663,7 @@ module Revox
3081
3663
  QUEUED_FOR_CALLING = :queued_for_calling
3082
3664
  CALLING = :calling
3083
3665
  POST_PROCESSING = :post_processing
3666
+ NOT_LAUNCHED = :not_launched
3084
3667
  SCHEDULED = :scheduled
3085
3668
  PAUSED = :paused
3086
3669
  COMPLETED = :completed
@@ -3101,9 +3684,6 @@ module Revox
3101
3684
  INTERESTED = :interested
3102
3685
  COMPLETED = :completed
3103
3686
  REQUESTED_CALLBACK_LATER = :requested_callback_later
3104
- REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
3105
- DO_NOT_CONTACT = :do_not_contact
3106
- AI_AVERSE = :ai_averse
3107
3687
 
3108
3688
  # @!method self.values
3109
3689
  # @return [Array<Symbol>]