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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -0
- data/README.md +38 -38
- data/lib/revox/models/assistant_clone_response.rb +87 -65
- data/lib/revox/models/assistant_create_params.rb +90 -66
- data/lib/revox/models/assistant_create_response.rb +87 -65
- data/lib/revox/models/assistant_list_response.rb +87 -65
- data/lib/revox/models/assistant_retrieve_response.rb +86 -65
- data/lib/revox/models/assistant_update_params.rb +90 -66
- data/lib/revox/models/assistant_update_response.rb +87 -65
- data/lib/revox/models/call_create_params.rb +117 -90
- data/lib/revox/models/call_create_response.rb +670 -90
- data/lib/revox/models/call_export_params.rb +1 -3
- data/lib/revox/models/call_phone_history_response.rb +0 -3
- data/lib/revox/models/call_retrieve_response.rb +671 -90
- data/lib/revox/models/call_search_params.rb +1 -3
- data/lib/revox/models/call_search_response.rb +670 -90
- data/lib/revox/models/campaign_create_params.rb +7 -57
- data/lib/revox/models/campaign_create_response.rb +108 -119
- data/lib/revox/models/campaign_get_rows_response.rb +672 -90
- data/lib/revox/models/campaign_list_response.rb +108 -119
- data/lib/revox/models/campaign_retrieve_response.rb +108 -119
- data/lib/revox/models/campaign_statistics_response.rb +51 -23
- data/lib/revox/models/campaign_update_params.rb +9 -78
- data/lib/revox/models/campaign_update_response.rb +108 -119
- data/lib/revox/models/phone_number_list_response.rb +87 -65
- data/lib/revox/models/phone_number_update_response.rb +87 -65
- data/lib/revox/models/voice_list_response.rb +1 -0
- data/lib/revox/models/voice_preview_params.rb +1 -0
- data/lib/revox/models/voice_retrieve_params.rb +1 -0
- data/lib/revox/models.rb +0 -2
- data/lib/revox/resources/assistants.rb +10 -10
- data/lib/revox/resources/call.rb +4 -4
- data/lib/revox/resources/campaigns.rb +13 -45
- data/lib/revox/version.rb +1 -1
- data/lib/revox.rb +0 -2
- data/rbi/revox/models/assistant_clone_response.rbi +157 -147
- data/rbi/revox/models/assistant_create_params.rbi +148 -162
- data/rbi/revox/models/assistant_create_response.rbi +157 -147
- data/rbi/revox/models/assistant_list_response.rbi +157 -147
- data/rbi/revox/models/assistant_retrieve_response.rbi +153 -147
- data/rbi/revox/models/assistant_update_params.rbi +148 -162
- data/rbi/revox/models/assistant_update_response.rbi +157 -147
- data/rbi/revox/models/call_create_params.rbi +190 -187
- data/rbi/revox/models/call_create_response.rbi +1138 -227
- data/rbi/revox/models/call_export_params.rbi +5 -15
- data/rbi/revox/models/call_phone_history_response.rbi +0 -15
- data/rbi/revox/models/call_retrieve_response.rbi +1138 -227
- data/rbi/revox/models/call_search_params.rbi +2 -9
- data/rbi/revox/models/call_search_response.rbi +1138 -227
- data/rbi/revox/models/campaign_create_params.rbi +9 -87
- data/rbi/revox/models/campaign_create_response.rbi +188 -266
- data/rbi/revox/models/campaign_get_rows_response.rbi +1138 -225
- data/rbi/revox/models/campaign_list_response.rbi +188 -262
- data/rbi/revox/models/campaign_retrieve_response.rbi +188 -266
- data/rbi/revox/models/campaign_statistics_response.rbi +94 -36
- data/rbi/revox/models/campaign_update_params.rbi +10 -128
- data/rbi/revox/models/campaign_update_response.rbi +188 -266
- data/rbi/revox/models/phone_number_list_response.rbi +157 -147
- data/rbi/revox/models/phone_number_update_response.rbi +157 -147
- data/rbi/revox/models/voice_list_response.rbi +5 -0
- data/rbi/revox/models/voice_preview_params.rbi +2 -0
- data/rbi/revox/models/voice_retrieve_params.rbi +2 -0
- data/rbi/revox/models.rbi +0 -2
- data/rbi/revox/resources/assistants.rbi +40 -22
- data/rbi/revox/resources/call.rbi +7 -4
- data/rbi/revox/resources/campaigns.rbi +12 -44
- data/sig/revox/models/assistant_clone_response.rbs +46 -54
- data/sig/revox/models/assistant_create_params.rbs +39 -58
- data/sig/revox/models/assistant_create_response.rbs +46 -54
- data/sig/revox/models/assistant_list_response.rbs +46 -54
- data/sig/revox/models/assistant_retrieve_response.rbs +46 -54
- data/sig/revox/models/assistant_update_params.rbs +39 -58
- data/sig/revox/models/assistant_update_response.rbs +46 -54
- data/sig/revox/models/call_create_params.rbs +50 -71
- data/sig/revox/models/call_create_response.rbs +468 -77
- data/sig/revox/models/call_export_params.rbs +2 -6
- data/sig/revox/models/call_phone_history_response.rbs +1 -10
- data/sig/revox/models/call_retrieve_response.rbs +468 -77
- data/sig/revox/models/call_search_params.rbs +2 -6
- data/sig/revox/models/call_search_response.rbs +468 -77
- data/sig/revox/models/campaign_create_params.rbs +5 -50
- data/sig/revox/models/campaign_create_response.rbs +62 -98
- data/sig/revox/models/campaign_get_rows_response.rbs +467 -73
- data/sig/revox/models/campaign_list_response.rbs +62 -98
- data/sig/revox/models/campaign_retrieve_response.rbs +62 -98
- data/sig/revox/models/campaign_statistics_response.rbs +55 -24
- data/sig/revox/models/campaign_update_params.rbs +1 -69
- data/sig/revox/models/campaign_update_response.rbs +62 -98
- data/sig/revox/models/phone_number_list_response.rbs +46 -54
- data/sig/revox/models/phone_number_update_response.rbs +46 -54
- data/sig/revox/models/voice_list_response.rbs +2 -1
- data/sig/revox/models/voice_preview_params.rbs +2 -1
- data/sig/revox/models/voice_retrieve_params.rbs +2 -1
- data/sig/revox/models.rbs +0 -2
- data/sig/revox/resources/assistants.rbs +4 -4
- data/sig/revox/resources/call.rbs +1 -1
- data/sig/revox/resources/campaigns.rbs +0 -12
- metadata +2 -8
- data/lib/revox/models/campaign_launch_params.rb +0 -20
- data/lib/revox/models/campaign_launch_response.rb +0 -2030
- data/rbi/revox/models/campaign_launch_params.rbi +0 -33
- data/rbi/revox/models/campaign_launch_response.rbi +0 -4170
- data/sig/revox/models/campaign_launch_params.rbs +0 -20
- data/sig/revox/models/campaign_launch_response.rbs +0 -1694
|
@@ -257,6 +257,13 @@ module Revox
|
|
|
257
257
|
sig { returns(T.nilable(String)) }
|
|
258
258
|
attr_accessor :outcome_summary
|
|
259
259
|
|
|
260
|
+
# Slack channels resolved from the agent prompt's own routing rules, when it
|
|
261
|
+
# defines any. Always a subset of the channels configured on the assistant. Null
|
|
262
|
+
# when the prompt defines no routing rules, in which case every configured channel
|
|
263
|
+
# is notified.
|
|
264
|
+
sig { returns(T.nilable(T::Array[String])) }
|
|
265
|
+
attr_accessor :slack_channel_ids
|
|
266
|
+
|
|
260
267
|
# This represent a call "order" that was requested by the user. A call order can
|
|
261
268
|
# be resolved over multiple call attempts spanning up to a few days.
|
|
262
269
|
sig do
|
|
@@ -314,7 +321,8 @@ module Revox
|
|
|
314
321
|
T.nilable(
|
|
315
322
|
Revox::Models::CallRetrieveResponse::Call::Outcome::OrSymbol
|
|
316
323
|
),
|
|
317
|
-
outcome_summary: T.nilable(String)
|
|
324
|
+
outcome_summary: T.nilable(String),
|
|
325
|
+
slack_channel_ids: T.nilable(T::Array[String])
|
|
318
326
|
).returns(T.attached_class)
|
|
319
327
|
end
|
|
320
328
|
def self.new(
|
|
@@ -376,7 +384,12 @@ module Revox
|
|
|
376
384
|
# Business outcome of the call. Null if not computed or no transcript.
|
|
377
385
|
outcome: nil,
|
|
378
386
|
# LLM explanation for the outcome, when outcome was computed from the transcript.
|
|
379
|
-
outcome_summary: nil
|
|
387
|
+
outcome_summary: nil,
|
|
388
|
+
# Slack channels resolved from the agent prompt's own routing rules, when it
|
|
389
|
+
# defines any. Always a subset of the channels configured on the assistant. Null
|
|
390
|
+
# when the prompt defines no routing rules, in which case every configured channel
|
|
391
|
+
# is notified.
|
|
392
|
+
slack_channel_ids: nil
|
|
380
393
|
)
|
|
381
394
|
end
|
|
382
395
|
|
|
@@ -426,7 +439,8 @@ module Revox
|
|
|
426
439
|
T.nilable(
|
|
427
440
|
Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
|
|
428
441
|
),
|
|
429
|
-
outcome_summary: T.nilable(String)
|
|
442
|
+
outcome_summary: T.nilable(String),
|
|
443
|
+
slack_channel_ids: T.nilable(T::Array[String])
|
|
430
444
|
}
|
|
431
445
|
)
|
|
432
446
|
end
|
|
@@ -595,14 +609,6 @@ module Revox
|
|
|
595
609
|
sig { returns(T.nilable(String)) }
|
|
596
610
|
attr_accessor :email_notification_address
|
|
597
611
|
|
|
598
|
-
# The language used for the notification email content. One of "en" or "fr".
|
|
599
|
-
sig do
|
|
600
|
-
returns(
|
|
601
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
|
|
602
|
-
)
|
|
603
|
-
end
|
|
604
|
-
attr_accessor :email_notification_language
|
|
605
|
-
|
|
606
612
|
# Which call outcomes trigger an email notification. E.g. ["interested",
|
|
607
613
|
# "completed", "none"]. Use "none" when outcome is null.
|
|
608
614
|
sig do
|
|
@@ -638,8 +644,8 @@ module Revox
|
|
|
638
644
|
sig { returns(T.nilable(String)) }
|
|
639
645
|
attr_accessor :from_phone_number
|
|
640
646
|
|
|
641
|
-
# Warm or cold transfer when
|
|
642
|
-
# not configured.
|
|
647
|
+
# Warm or cold transfer when transfer_destinations is non-empty; null when
|
|
648
|
+
# transfer is not configured.
|
|
643
649
|
sig do
|
|
644
650
|
returns(
|
|
645
651
|
T.nilable(
|
|
@@ -702,6 +708,11 @@ module Revox
|
|
|
702
708
|
end
|
|
703
709
|
attr_writer :position
|
|
704
710
|
|
|
711
|
+
# URL fetched before an inbound call is answered to resolve the assistant's prompt
|
|
712
|
+
# variables. Null when no lookup is configured.
|
|
713
|
+
sig { returns(T.nilable(String)) }
|
|
714
|
+
attr_accessor :precall_lookup_url
|
|
715
|
+
|
|
705
716
|
sig { returns(String) }
|
|
706
717
|
attr_accessor :prompt
|
|
707
718
|
|
|
@@ -823,9 +834,18 @@ module Revox
|
|
|
823
834
|
sig { returns(Float) }
|
|
824
835
|
attr_accessor :thinking_sound_volume
|
|
825
836
|
|
|
826
|
-
#
|
|
827
|
-
|
|
828
|
-
|
|
837
|
+
# Where calls can be transferred to when users ask to speak to a human. Null or
|
|
838
|
+
# empty when transfer is not configured.
|
|
839
|
+
sig do
|
|
840
|
+
returns(
|
|
841
|
+
T.nilable(
|
|
842
|
+
T::Array[
|
|
843
|
+
Revox::Models::CallRetrieveResponse::Call::Assistant::TransferDestination
|
|
844
|
+
]
|
|
845
|
+
)
|
|
846
|
+
)
|
|
847
|
+
end
|
|
848
|
+
attr_accessor :transfer_destinations
|
|
829
849
|
|
|
830
850
|
sig do
|
|
831
851
|
returns(
|
|
@@ -935,6 +955,12 @@ module Revox
|
|
|
935
955
|
end
|
|
936
956
|
attr_writer :faq_items
|
|
937
957
|
|
|
958
|
+
sig { returns(T.nilable(T::Boolean)) }
|
|
959
|
+
attr_reader :is_inbound_receptionist
|
|
960
|
+
|
|
961
|
+
sig { params(is_inbound_receptionist: T::Boolean).void }
|
|
962
|
+
attr_writer :is_inbound_receptionist
|
|
963
|
+
|
|
938
964
|
sig { returns(T.nilable(T::Boolean)) }
|
|
939
965
|
attr_reader :is_realestate_assistant
|
|
940
966
|
|
|
@@ -979,8 +1005,6 @@ module Revox
|
|
|
979
1005
|
]
|
|
980
1006
|
),
|
|
981
1007
|
email_notification_address: T.nilable(String),
|
|
982
|
-
email_notification_language:
|
|
983
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::OrSymbol,
|
|
984
1008
|
email_notification_outcomes:
|
|
985
1009
|
T.nilable(
|
|
986
1010
|
T::Array[
|
|
@@ -1014,6 +1038,7 @@ module Revox
|
|
|
1014
1038
|
T.nilable(
|
|
1015
1039
|
Revox::Models::CallRetrieveResponse::Call::Assistant::Position::OrHash
|
|
1016
1040
|
),
|
|
1041
|
+
precall_lookup_url: T.nilable(String),
|
|
1017
1042
|
prompt: String,
|
|
1018
1043
|
prompt_flow:
|
|
1019
1044
|
T.nilable(
|
|
@@ -1044,7 +1069,12 @@ module Revox
|
|
|
1044
1069
|
),
|
|
1045
1070
|
thinking_sound_probability: Float,
|
|
1046
1071
|
thinking_sound_volume: Float,
|
|
1047
|
-
|
|
1072
|
+
transfer_destinations:
|
|
1073
|
+
T.nilable(
|
|
1074
|
+
T::Array[
|
|
1075
|
+
Revox::Models::CallRetrieveResponse::Call::Assistant::TransferDestination::OrHash
|
|
1076
|
+
]
|
|
1077
|
+
),
|
|
1048
1078
|
type:
|
|
1049
1079
|
Revox::Models::CallRetrieveResponse::Call::Assistant::Type::OrSymbol,
|
|
1050
1080
|
updated_at: T.anything,
|
|
@@ -1068,6 +1098,7 @@ module Revox
|
|
|
1068
1098
|
T::Array[
|
|
1069
1099
|
Revox::Models::CallRetrieveResponse::Call::Assistant::FaqItem::OrHash
|
|
1070
1100
|
],
|
|
1101
|
+
is_inbound_receptionist: T::Boolean,
|
|
1071
1102
|
is_realestate_assistant: T::Boolean,
|
|
1072
1103
|
pending_faq_count: Float
|
|
1073
1104
|
).returns(T.attached_class)
|
|
@@ -1096,8 +1127,6 @@ module Revox
|
|
|
1096
1127
|
# outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
|
|
1097
1128
|
# bob@y.com").
|
|
1098
1129
|
email_notification_address:,
|
|
1099
|
-
# The language used for the notification email content. One of "en" or "fr".
|
|
1100
|
-
email_notification_language:,
|
|
1101
1130
|
# Which call outcomes trigger an email notification. E.g. ["interested",
|
|
1102
1131
|
# "completed", "none"]. Use "none" when outcome is null.
|
|
1103
1132
|
email_notification_outcomes:,
|
|
@@ -1109,8 +1138,8 @@ module Revox
|
|
|
1109
1138
|
# Override the default outbound phone number for calls placed with this assistant.
|
|
1110
1139
|
# When null, the organization's default phone number is used.
|
|
1111
1140
|
from_phone_number:,
|
|
1112
|
-
# Warm or cold transfer when
|
|
1113
|
-
# not configured.
|
|
1141
|
+
# Warm or cold transfer when transfer_destinations is non-empty; null when
|
|
1142
|
+
# transfer is not configured.
|
|
1114
1143
|
human_transfer_mode:,
|
|
1115
1144
|
# Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
|
|
1116
1145
|
# skip turns to navigate phone menus.
|
|
@@ -1129,6 +1158,9 @@ module Revox
|
|
|
1129
1158
|
name:,
|
|
1130
1159
|
organization_id:,
|
|
1131
1160
|
position:,
|
|
1161
|
+
# URL fetched before an inbound call is answered to resolve the assistant's prompt
|
|
1162
|
+
# variables. Null when no lookup is configured.
|
|
1163
|
+
precall_lookup_url:,
|
|
1132
1164
|
prompt:,
|
|
1133
1165
|
prompt_flow:,
|
|
1134
1166
|
slack:,
|
|
@@ -1160,8 +1192,9 @@ module Revox
|
|
|
1160
1192
|
thinking_sound_probability:,
|
|
1161
1193
|
# Volume of the thinking sound (0 = silent, 1 = max).
|
|
1162
1194
|
thinking_sound_volume:,
|
|
1163
|
-
#
|
|
1164
|
-
|
|
1195
|
+
# Where calls can be transferred to when users ask to speak to a human. Null or
|
|
1196
|
+
# empty when transfer is not configured.
|
|
1197
|
+
transfer_destinations:,
|
|
1165
1198
|
type:,
|
|
1166
1199
|
updated_at:,
|
|
1167
1200
|
voice:,
|
|
@@ -1180,6 +1213,7 @@ module Revox
|
|
|
1180
1213
|
# The user who created the assistant.
|
|
1181
1214
|
created_by: nil,
|
|
1182
1215
|
faq_items: nil,
|
|
1216
|
+
is_inbound_receptionist: nil,
|
|
1183
1217
|
is_realestate_assistant: nil,
|
|
1184
1218
|
pending_faq_count: nil
|
|
1185
1219
|
)
|
|
@@ -1218,8 +1252,6 @@ module Revox
|
|
|
1218
1252
|
]
|
|
1219
1253
|
),
|
|
1220
1254
|
email_notification_address: T.nilable(String),
|
|
1221
|
-
email_notification_language:
|
|
1222
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol,
|
|
1223
1255
|
email_notification_outcomes:
|
|
1224
1256
|
T.nilable(
|
|
1225
1257
|
T::Array[
|
|
@@ -1248,6 +1280,7 @@ module Revox
|
|
|
1248
1280
|
T.nilable(
|
|
1249
1281
|
Revox::Models::CallRetrieveResponse::Call::Assistant::Position
|
|
1250
1282
|
),
|
|
1283
|
+
precall_lookup_url: T.nilable(String),
|
|
1251
1284
|
prompt: String,
|
|
1252
1285
|
prompt_flow:
|
|
1253
1286
|
T.nilable(
|
|
@@ -1278,7 +1311,12 @@ module Revox
|
|
|
1278
1311
|
),
|
|
1279
1312
|
thinking_sound_probability: Float,
|
|
1280
1313
|
thinking_sound_volume: Float,
|
|
1281
|
-
|
|
1314
|
+
transfer_destinations:
|
|
1315
|
+
T.nilable(
|
|
1316
|
+
T::Array[
|
|
1317
|
+
Revox::Models::CallRetrieveResponse::Call::Assistant::TransferDestination
|
|
1318
|
+
]
|
|
1319
|
+
),
|
|
1282
1320
|
type:
|
|
1283
1321
|
Revox::Models::CallRetrieveResponse::Call::Assistant::Type::TaggedSymbol,
|
|
1284
1322
|
updated_at: T.anything,
|
|
@@ -1302,6 +1340,7 @@ module Revox
|
|
|
1302
1340
|
T::Array[
|
|
1303
1341
|
Revox::Models::CallRetrieveResponse::Call::Assistant::FaqItem
|
|
1304
1342
|
],
|
|
1343
|
+
is_inbound_receptionist: T::Boolean,
|
|
1305
1344
|
is_realestate_assistant: T::Boolean,
|
|
1306
1345
|
pending_faq_count: Float
|
|
1307
1346
|
}
|
|
@@ -1342,21 +1381,6 @@ module Revox
|
|
|
1342
1381
|
:requested_callback_later,
|
|
1343
1382
|
Revox::Models::CallRetrieveResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
1344
1383
|
)
|
|
1345
|
-
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
1346
|
-
T.let(
|
|
1347
|
-
:requested_callback_new_number,
|
|
1348
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
1349
|
-
)
|
|
1350
|
-
DO_NOT_CONTACT =
|
|
1351
|
-
T.let(
|
|
1352
|
-
:do_not_contact,
|
|
1353
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
1354
|
-
)
|
|
1355
|
-
AI_AVERSE =
|
|
1356
|
-
T.let(
|
|
1357
|
-
:ai_averse,
|
|
1358
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
1359
|
-
)
|
|
1360
1384
|
NONE =
|
|
1361
1385
|
T.let(
|
|
1362
1386
|
:none,
|
|
@@ -1625,7 +1649,8 @@ module Revox
|
|
|
1625
1649
|
sig { returns(String) }
|
|
1626
1650
|
attr_accessor :calling_window_start_time
|
|
1627
1651
|
|
|
1628
|
-
# Delay between retry attempts in seconds.
|
|
1652
|
+
# Delay between retry attempts in seconds. 0 retries as soon as the calling window
|
|
1653
|
+
# allows. Default: 7200 (2 hours).
|
|
1629
1654
|
sig { returns(Integer) }
|
|
1630
1655
|
attr_accessor :retry_delay_seconds
|
|
1631
1656
|
|
|
@@ -1645,7 +1670,8 @@ module Revox
|
|
|
1645
1670
|
# timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
|
|
1646
1671
|
# Examples: '09:00', '10am'. Default: '10:00'.
|
|
1647
1672
|
calling_window_start_time:,
|
|
1648
|
-
# Delay between retry attempts in seconds.
|
|
1673
|
+
# Delay between retry attempts in seconds. 0 retries as soon as the calling window
|
|
1674
|
+
# allows. Default: 7200 (2 hours).
|
|
1649
1675
|
retry_delay_seconds:
|
|
1650
1676
|
)
|
|
1651
1677
|
end
|
|
@@ -2032,41 +2058,6 @@ module Revox
|
|
|
2032
2058
|
end
|
|
2033
2059
|
end
|
|
2034
2060
|
|
|
2035
|
-
# The language used for the notification email content. One of "en" or "fr".
|
|
2036
|
-
module EmailNotificationLanguage
|
|
2037
|
-
extend Revox::Internal::Type::Enum
|
|
2038
|
-
|
|
2039
|
-
TaggedSymbol =
|
|
2040
|
-
T.type_alias do
|
|
2041
|
-
T.all(
|
|
2042
|
-
Symbol,
|
|
2043
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage
|
|
2044
|
-
)
|
|
2045
|
-
end
|
|
2046
|
-
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2047
|
-
|
|
2048
|
-
EN =
|
|
2049
|
-
T.let(
|
|
2050
|
-
:en,
|
|
2051
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
|
|
2052
|
-
)
|
|
2053
|
-
FR =
|
|
2054
|
-
T.let(
|
|
2055
|
-
:fr,
|
|
2056
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
|
|
2057
|
-
)
|
|
2058
|
-
|
|
2059
|
-
sig do
|
|
2060
|
-
override.returns(
|
|
2061
|
-
T::Array[
|
|
2062
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationLanguage::TaggedSymbol
|
|
2063
|
-
]
|
|
2064
|
-
)
|
|
2065
|
-
end
|
|
2066
|
-
def self.values
|
|
2067
|
-
end
|
|
2068
|
-
end
|
|
2069
|
-
|
|
2070
2061
|
module EmailNotificationOutcome
|
|
2071
2062
|
extend Revox::Internal::Type::Enum
|
|
2072
2063
|
|
|
@@ -2099,21 +2090,6 @@ module Revox
|
|
|
2099
2090
|
:requested_callback_later,
|
|
2100
2091
|
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
2101
2092
|
)
|
|
2102
|
-
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
2103
|
-
T.let(
|
|
2104
|
-
:requested_callback_new_number,
|
|
2105
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
2106
|
-
)
|
|
2107
|
-
DO_NOT_CONTACT =
|
|
2108
|
-
T.let(
|
|
2109
|
-
:do_not_contact,
|
|
2110
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
2111
|
-
)
|
|
2112
|
-
AI_AVERSE =
|
|
2113
|
-
T.let(
|
|
2114
|
-
:ai_averse,
|
|
2115
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
2116
|
-
)
|
|
2117
2093
|
NONE =
|
|
2118
2094
|
T.let(
|
|
2119
2095
|
:none,
|
|
@@ -2170,8 +2146,8 @@ module Revox
|
|
|
2170
2146
|
end
|
|
2171
2147
|
end
|
|
2172
2148
|
|
|
2173
|
-
# Warm or cold transfer when
|
|
2174
|
-
# not configured.
|
|
2149
|
+
# Warm or cold transfer when transfer_destinations is non-empty; null when
|
|
2150
|
+
# transfer is not configured.
|
|
2175
2151
|
module HumanTransferMode
|
|
2176
2152
|
extend Revox::Internal::Type::Enum
|
|
2177
2153
|
|
|
@@ -2769,9 +2745,17 @@ module Revox
|
|
|
2769
2745
|
)
|
|
2770
2746
|
end
|
|
2771
2747
|
|
|
2772
|
-
# The Slack
|
|
2773
|
-
|
|
2774
|
-
|
|
2748
|
+
# The Slack channels eligible to receive the notification. When more than one is
|
|
2749
|
+
# configured, the agent prompt may define routing rules to narrow it down per
|
|
2750
|
+
# call; with no such rules every channel here is notified.
|
|
2751
|
+
sig do
|
|
2752
|
+
returns(
|
|
2753
|
+
T::Array[
|
|
2754
|
+
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Channel
|
|
2755
|
+
]
|
|
2756
|
+
)
|
|
2757
|
+
end
|
|
2758
|
+
attr_accessor :channels
|
|
2775
2759
|
|
|
2776
2760
|
# The Nango connection ID linking the org's Slack workspace to Revox.
|
|
2777
2761
|
sig { returns(String) }
|
|
@@ -2788,45 +2772,43 @@ module Revox
|
|
|
2788
2772
|
end
|
|
2789
2773
|
attr_accessor :outcomes
|
|
2790
2774
|
|
|
2791
|
-
# Human-readable Slack channel name, cached for display in the UI.
|
|
2792
|
-
sig { returns(T.nilable(String)) }
|
|
2793
|
-
attr_accessor :channel_name
|
|
2794
|
-
|
|
2795
2775
|
# Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
2796
2776
|
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
|
|
2797
|
-
# {{last_name}}, {{email}}, {{company}}, {{
|
|
2798
|
-
# prompt_variables and structured_output keys. When
|
|
2799
|
-
# is used.
|
|
2777
|
+
# {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
|
|
2778
|
+
# {{contact_line}}, plus prompt_variables and structured_output keys. When
|
|
2779
|
+
# null/empty a default template is used.
|
|
2800
2780
|
sig { returns(T.nilable(String)) }
|
|
2801
2781
|
attr_accessor :template
|
|
2802
2782
|
|
|
2803
2783
|
sig do
|
|
2804
2784
|
params(
|
|
2805
|
-
|
|
2785
|
+
channels:
|
|
2786
|
+
T::Array[
|
|
2787
|
+
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Channel::OrHash
|
|
2788
|
+
],
|
|
2806
2789
|
connection_id: String,
|
|
2807
2790
|
outcomes:
|
|
2808
2791
|
T::Array[
|
|
2809
2792
|
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::OrSymbol
|
|
2810
2793
|
],
|
|
2811
|
-
channel_name: T.nilable(String),
|
|
2812
2794
|
template: T.nilable(String)
|
|
2813
2795
|
).returns(T.attached_class)
|
|
2814
2796
|
end
|
|
2815
2797
|
def self.new(
|
|
2816
|
-
# The Slack
|
|
2817
|
-
|
|
2798
|
+
# The Slack channels eligible to receive the notification. When more than one is
|
|
2799
|
+
# configured, the agent prompt may define routing rules to narrow it down per
|
|
2800
|
+
# call; with no such rules every channel here is notified.
|
|
2801
|
+
channels:,
|
|
2818
2802
|
# The Nango connection ID linking the org's Slack workspace to Revox.
|
|
2819
2803
|
connection_id:,
|
|
2820
2804
|
# Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
|
|
2821
2805
|
# Use 'none' to notify when outcome is null.
|
|
2822
2806
|
outcomes:,
|
|
2823
|
-
# Human-readable Slack channel name, cached for display in the UI.
|
|
2824
|
-
channel_name: nil,
|
|
2825
2807
|
# Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
2826
2808
|
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
|
|
2827
|
-
# {{last_name}}, {{email}}, {{company}}, {{
|
|
2828
|
-
# prompt_variables and structured_output keys. When
|
|
2829
|
-
# is used.
|
|
2809
|
+
# {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
|
|
2810
|
+
# {{contact_line}}, plus prompt_variables and structured_output keys. When
|
|
2811
|
+
# null/empty a default template is used.
|
|
2830
2812
|
template: nil
|
|
2831
2813
|
)
|
|
2832
2814
|
end
|
|
@@ -2834,13 +2816,15 @@ module Revox
|
|
|
2834
2816
|
sig do
|
|
2835
2817
|
override.returns(
|
|
2836
2818
|
{
|
|
2837
|
-
|
|
2819
|
+
channels:
|
|
2820
|
+
T::Array[
|
|
2821
|
+
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Channel
|
|
2822
|
+
],
|
|
2838
2823
|
connection_id: String,
|
|
2839
2824
|
outcomes:
|
|
2840
2825
|
T::Array[
|
|
2841
2826
|
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
|
|
2842
2827
|
],
|
|
2843
|
-
channel_name: T.nilable(String),
|
|
2844
2828
|
template: T.nilable(String)
|
|
2845
2829
|
}
|
|
2846
2830
|
)
|
|
@@ -2848,6 +2832,43 @@ module Revox
|
|
|
2848
2832
|
def to_hash
|
|
2849
2833
|
end
|
|
2850
2834
|
|
|
2835
|
+
class Channel < Revox::Internal::Type::BaseModel
|
|
2836
|
+
OrHash =
|
|
2837
|
+
T.type_alias do
|
|
2838
|
+
T.any(
|
|
2839
|
+
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Channel,
|
|
2840
|
+
Revox::Internal::AnyHash
|
|
2841
|
+
)
|
|
2842
|
+
end
|
|
2843
|
+
|
|
2844
|
+
# The Slack channel ID (e.g. 'C01234567').
|
|
2845
|
+
sig { returns(String) }
|
|
2846
|
+
attr_accessor :id
|
|
2847
|
+
|
|
2848
|
+
# Human-readable Slack channel name, cached for display in the UI and given to the
|
|
2849
|
+
# LLM when the agent prompt routes by channel name.
|
|
2850
|
+
sig { returns(T.nilable(String)) }
|
|
2851
|
+
attr_accessor :name
|
|
2852
|
+
|
|
2853
|
+
sig do
|
|
2854
|
+
params(id: String, name: T.nilable(String)).returns(
|
|
2855
|
+
T.attached_class
|
|
2856
|
+
)
|
|
2857
|
+
end
|
|
2858
|
+
def self.new(
|
|
2859
|
+
# The Slack channel ID (e.g. 'C01234567').
|
|
2860
|
+
id:,
|
|
2861
|
+
# Human-readable Slack channel name, cached for display in the UI and given to the
|
|
2862
|
+
# LLM when the agent prompt routes by channel name.
|
|
2863
|
+
name: nil
|
|
2864
|
+
)
|
|
2865
|
+
end
|
|
2866
|
+
|
|
2867
|
+
sig { override.returns({ id: String, name: T.nilable(String) }) }
|
|
2868
|
+
def to_hash
|
|
2869
|
+
end
|
|
2870
|
+
end
|
|
2871
|
+
|
|
2851
2872
|
module Outcome
|
|
2852
2873
|
extend Revox::Internal::Type::Enum
|
|
2853
2874
|
|
|
@@ -2880,21 +2901,6 @@ module Revox
|
|
|
2880
2901
|
:requested_callback_later,
|
|
2881
2902
|
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
|
|
2882
2903
|
)
|
|
2883
|
-
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
2884
|
-
T.let(
|
|
2885
|
-
:requested_callback_new_number,
|
|
2886
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
|
|
2887
|
-
)
|
|
2888
|
-
DO_NOT_CONTACT =
|
|
2889
|
-
T.let(
|
|
2890
|
-
:do_not_contact,
|
|
2891
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
|
|
2892
|
-
)
|
|
2893
|
-
AI_AVERSE =
|
|
2894
|
-
T.let(
|
|
2895
|
-
:ai_averse,
|
|
2896
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::Slack::Outcome::TaggedSymbol
|
|
2897
|
-
)
|
|
2898
2904
|
NONE =
|
|
2899
2905
|
T.let(
|
|
2900
2906
|
:none,
|
|
@@ -3209,6 +3215,34 @@ module Revox
|
|
|
3209
3215
|
end
|
|
3210
3216
|
end
|
|
3211
3217
|
|
|
3218
|
+
class TransferDestination < Revox::Internal::Type::BaseModel
|
|
3219
|
+
OrHash =
|
|
3220
|
+
T.type_alias do
|
|
3221
|
+
T.any(
|
|
3222
|
+
Revox::Models::CallRetrieveResponse::Call::Assistant::TransferDestination,
|
|
3223
|
+
Revox::Internal::AnyHash
|
|
3224
|
+
)
|
|
3225
|
+
end
|
|
3226
|
+
|
|
3227
|
+
sig { returns(String) }
|
|
3228
|
+
attr_accessor :label
|
|
3229
|
+
|
|
3230
|
+
sig { returns(String) }
|
|
3231
|
+
attr_accessor :phone_number
|
|
3232
|
+
|
|
3233
|
+
sig do
|
|
3234
|
+
params(label: String, phone_number: String).returns(
|
|
3235
|
+
T.attached_class
|
|
3236
|
+
)
|
|
3237
|
+
end
|
|
3238
|
+
def self.new(label:, phone_number:)
|
|
3239
|
+
end
|
|
3240
|
+
|
|
3241
|
+
sig { override.returns({ label: String, phone_number: String }) }
|
|
3242
|
+
def to_hash
|
|
3243
|
+
end
|
|
3244
|
+
end
|
|
3245
|
+
|
|
3212
3246
|
module Type
|
|
3213
3247
|
extend Revox::Internal::Type::Enum
|
|
3214
3248
|
|
|
@@ -3289,7 +3323,7 @@ module Revox
|
|
|
3289
3323
|
attr_writer :model
|
|
3290
3324
|
|
|
3291
3325
|
# The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
|
|
3292
|
-
# 0.7–1.2. Default is 1.0.
|
|
3326
|
+
# 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
|
|
3293
3327
|
sig { returns(T.nilable(Float)) }
|
|
3294
3328
|
attr_reader :speed
|
|
3295
3329
|
|
|
@@ -3324,7 +3358,7 @@ module Revox
|
|
|
3324
3358
|
# for other providers.
|
|
3325
3359
|
model: nil,
|
|
3326
3360
|
# The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
|
|
3327
|
-
# 0.7–1.2. Default is 1.0.
|
|
3361
|
+
# 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
|
|
3328
3362
|
speed: nil,
|
|
3329
3363
|
# Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
|
|
3330
3364
|
# providers.
|
|
@@ -3371,6 +3405,11 @@ module Revox
|
|
|
3371
3405
|
:elevenlabs,
|
|
3372
3406
|
Revox::Models::CallRetrieveResponse::Call::Assistant::Voice::Provider::TaggedSymbol
|
|
3373
3407
|
)
|
|
3408
|
+
GRADIUM =
|
|
3409
|
+
T.let(
|
|
3410
|
+
:gradium,
|
|
3411
|
+
Revox::Models::CallRetrieveResponse::Call::Assistant::Voice::Provider::TaggedSymbol
|
|
3412
|
+
)
|
|
3374
3413
|
|
|
3375
3414
|
sig do
|
|
3376
3415
|
override.returns(
|
|
@@ -3601,21 +3640,6 @@ module Revox
|
|
|
3601
3640
|
:requested_callback_later,
|
|
3602
3641
|
Revox::Models::CallRetrieveResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3603
3642
|
)
|
|
3604
|
-
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
3605
|
-
T.let(
|
|
3606
|
-
:requested_callback_new_number,
|
|
3607
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3608
|
-
)
|
|
3609
|
-
DO_NOT_CONTACT =
|
|
3610
|
-
T.let(
|
|
3611
|
-
:do_not_contact,
|
|
3612
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3613
|
-
)
|
|
3614
|
-
AI_AVERSE =
|
|
3615
|
-
T.let(
|
|
3616
|
-
:ai_averse,
|
|
3617
|
-
Revox::Models::CallRetrieveResponse::Call::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3618
|
-
)
|
|
3619
3643
|
NONE =
|
|
3620
3644
|
T.let(
|
|
3621
3645
|
:none,
|
|
@@ -3833,6 +3857,37 @@ module Revox
|
|
|
3833
3857
|
sig { returns(T.anything) }
|
|
3834
3858
|
attr_accessor :ended_at
|
|
3835
3859
|
|
|
3860
|
+
# Whether the AI agent conducted the conversation on this attempt. False for a
|
|
3861
|
+
# silent speed-dial probe (whose agent only detects a human) and for attempts that
|
|
3862
|
+
# were never answered.
|
|
3863
|
+
sig { returns(T::Boolean) }
|
|
3864
|
+
attr_accessor :handled_by_ai
|
|
3865
|
+
|
|
3866
|
+
# Whether a human operator conducted (part of) this attempt — a jump-in takeover
|
|
3867
|
+
# or a speed-dial operator connection (both stamp human_takeover_at).
|
|
3868
|
+
sig { returns(T::Boolean) }
|
|
3869
|
+
attr_accessor :handled_by_human
|
|
3870
|
+
|
|
3871
|
+
# The team member responsible for following up on this call.
|
|
3872
|
+
sig do
|
|
3873
|
+
returns(
|
|
3874
|
+
T.nilable(
|
|
3875
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser
|
|
3876
|
+
)
|
|
3877
|
+
)
|
|
3878
|
+
end
|
|
3879
|
+
attr_reader :handled_by_user
|
|
3880
|
+
|
|
3881
|
+
sig do
|
|
3882
|
+
params(
|
|
3883
|
+
handled_by_user:
|
|
3884
|
+
T.nilable(
|
|
3885
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser::OrHash
|
|
3886
|
+
)
|
|
3887
|
+
).void
|
|
3888
|
+
end
|
|
3889
|
+
attr_writer :handled_by_user
|
|
3890
|
+
|
|
3836
3891
|
# The phone number that was called. Formatted in E.164 format. Example:
|
|
3837
3892
|
# +1234567890
|
|
3838
3893
|
sig { returns(String) }
|
|
@@ -3867,6 +3922,19 @@ module Revox
|
|
|
3867
3922
|
sig { returns(T.nilable(T::Array[String])) }
|
|
3868
3923
|
attr_accessor :assistants_used
|
|
3869
3924
|
|
|
3925
|
+
# Notification emails sent in connection with the call, ordered oldest first
|
|
3926
|
+
# (from/to addresses, subject, sent time).
|
|
3927
|
+
sig do
|
|
3928
|
+
returns(
|
|
3929
|
+
T.nilable(
|
|
3930
|
+
T::Array[
|
|
3931
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::EmailLog
|
|
3932
|
+
]
|
|
3933
|
+
)
|
|
3934
|
+
)
|
|
3935
|
+
end
|
|
3936
|
+
attr_accessor :email_log
|
|
3937
|
+
|
|
3870
3938
|
# Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
|
|
3871
3939
|
# 'voicemail', 'transfer', 'ivr_no_navigate'.
|
|
3872
3940
|
sig do
|
|
@@ -3916,6 +3984,20 @@ module Revox
|
|
|
3916
3984
|
end
|
|
3917
3985
|
attr_accessor :sms_log
|
|
3918
3986
|
|
|
3987
|
+
# Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
|
|
3988
|
+
# ordered by started_speaking_at_ms. Empty for calls recorded before this was
|
|
3989
|
+
# tracked or for realtime sessions that don't emit them.
|
|
3990
|
+
sig do
|
|
3991
|
+
returns(
|
|
3992
|
+
T.nilable(
|
|
3993
|
+
T::Array[
|
|
3994
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent
|
|
3995
|
+
]
|
|
3996
|
+
)
|
|
3997
|
+
)
|
|
3998
|
+
end
|
|
3999
|
+
attr_accessor :speech_events
|
|
4000
|
+
|
|
3919
4001
|
# The data extracted from the call, using the structured output config from the
|
|
3920
4002
|
# parent call object.
|
|
3921
4003
|
sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
|
|
@@ -3944,6 +4026,12 @@ module Revox
|
|
|
3944
4026
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::DialError::OrSymbol
|
|
3945
4027
|
),
|
|
3946
4028
|
ended_at: T.anything,
|
|
4029
|
+
handled_by_ai: T::Boolean,
|
|
4030
|
+
handled_by_human: T::Boolean,
|
|
4031
|
+
handled_by_user:
|
|
4032
|
+
T.nilable(
|
|
4033
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser::OrHash
|
|
4034
|
+
),
|
|
3947
4035
|
phone_number: String,
|
|
3948
4036
|
recording_url: T.nilable(String),
|
|
3949
4037
|
result:
|
|
@@ -3954,6 +4042,12 @@ module Revox
|
|
|
3954
4042
|
status:
|
|
3955
4043
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Status::OrSymbol,
|
|
3956
4044
|
assistants_used: T.nilable(T::Array[String]),
|
|
4045
|
+
email_log:
|
|
4046
|
+
T.nilable(
|
|
4047
|
+
T::Array[
|
|
4048
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::EmailLog::OrHash
|
|
4049
|
+
]
|
|
4050
|
+
),
|
|
3957
4051
|
end_reason:
|
|
3958
4052
|
T.nilable(
|
|
3959
4053
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::EndReason::OrSymbol
|
|
@@ -3974,6 +4068,12 @@ module Revox
|
|
|
3974
4068
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::OrHash
|
|
3975
4069
|
]
|
|
3976
4070
|
),
|
|
4071
|
+
speech_events:
|
|
4072
|
+
T.nilable(
|
|
4073
|
+
T::Array[
|
|
4074
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::OrHash
|
|
4075
|
+
]
|
|
4076
|
+
),
|
|
3977
4077
|
structured_output: T.nilable(T::Hash[Symbol, T.anything]),
|
|
3978
4078
|
transcript:
|
|
3979
4079
|
T.nilable(
|
|
@@ -3992,6 +4092,15 @@ module Revox
|
|
|
3992
4092
|
dial_error:,
|
|
3993
4093
|
# The time the call ended.
|
|
3994
4094
|
ended_at:,
|
|
4095
|
+
# Whether the AI agent conducted the conversation on this attempt. False for a
|
|
4096
|
+
# silent speed-dial probe (whose agent only detects a human) and for attempts that
|
|
4097
|
+
# were never answered.
|
|
4098
|
+
handled_by_ai:,
|
|
4099
|
+
# Whether a human operator conducted (part of) this attempt — a jump-in takeover
|
|
4100
|
+
# or a speed-dial operator connection (both stamp human_takeover_at).
|
|
4101
|
+
handled_by_human:,
|
|
4102
|
+
# The team member responsible for following up on this call.
|
|
4103
|
+
handled_by_user:,
|
|
3995
4104
|
# The phone number that was called. Formatted in E.164 format. Example:
|
|
3996
4105
|
# +1234567890
|
|
3997
4106
|
phone_number:,
|
|
@@ -4004,6 +4113,9 @@ module Revox
|
|
|
4004
4113
|
status:,
|
|
4005
4114
|
# Assistant node ids entered during this attempt, in traversal order.
|
|
4006
4115
|
assistants_used: nil,
|
|
4116
|
+
# Notification emails sent in connection with the call, ordered oldest first
|
|
4117
|
+
# (from/to addresses, subject, sent time).
|
|
4118
|
+
email_log: nil,
|
|
4007
4119
|
# Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
|
|
4008
4120
|
# 'voicemail', 'transfer', 'ivr_no_navigate'.
|
|
4009
4121
|
end_reason: nil,
|
|
@@ -4017,6 +4129,10 @@ module Revox
|
|
|
4017
4129
|
# first. The in-call `send_sms` is excluded — it already appears in the transcript
|
|
4018
4130
|
# as a tool call.
|
|
4019
4131
|
sms_log: nil,
|
|
4132
|
+
# Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
|
|
4133
|
+
# ordered by started_speaking_at_ms. Empty for calls recorded before this was
|
|
4134
|
+
# tracked or for realtime sessions that don't emit them.
|
|
4135
|
+
speech_events: nil,
|
|
4020
4136
|
# The data extracted from the call, using the structured output config from the
|
|
4021
4137
|
# parent call object.
|
|
4022
4138
|
structured_output: nil,
|
|
@@ -4035,6 +4151,12 @@ module Revox
|
|
|
4035
4151
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::DialError::TaggedSymbol
|
|
4036
4152
|
),
|
|
4037
4153
|
ended_at: T.anything,
|
|
4154
|
+
handled_by_ai: T::Boolean,
|
|
4155
|
+
handled_by_human: T::Boolean,
|
|
4156
|
+
handled_by_user:
|
|
4157
|
+
T.nilable(
|
|
4158
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser
|
|
4159
|
+
),
|
|
4038
4160
|
phone_number: String,
|
|
4039
4161
|
recording_url: T.nilable(String),
|
|
4040
4162
|
result:
|
|
@@ -4045,6 +4167,12 @@ module Revox
|
|
|
4045
4167
|
status:
|
|
4046
4168
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Status::TaggedSymbol,
|
|
4047
4169
|
assistants_used: T.nilable(T::Array[String]),
|
|
4170
|
+
email_log:
|
|
4171
|
+
T.nilable(
|
|
4172
|
+
T::Array[
|
|
4173
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::EmailLog
|
|
4174
|
+
]
|
|
4175
|
+
),
|
|
4048
4176
|
end_reason:
|
|
4049
4177
|
T.nilable(
|
|
4050
4178
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::EndReason::TaggedSymbol
|
|
@@ -4065,6 +4193,12 @@ module Revox
|
|
|
4065
4193
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog
|
|
4066
4194
|
]
|
|
4067
4195
|
),
|
|
4196
|
+
speech_events:
|
|
4197
|
+
T.nilable(
|
|
4198
|
+
T::Array[
|
|
4199
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent
|
|
4200
|
+
]
|
|
4201
|
+
),
|
|
4068
4202
|
structured_output: T.nilable(T::Hash[Symbol, T.anything]),
|
|
4069
4203
|
transcript:
|
|
4070
4204
|
T.nilable(
|
|
@@ -4143,52 +4277,106 @@ module Revox
|
|
|
4143
4277
|
end
|
|
4144
4278
|
end
|
|
4145
4279
|
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
TaggedSymbol =
|
|
4280
|
+
class HandledByUser < Revox::Internal::Type::BaseModel
|
|
4281
|
+
OrHash =
|
|
4150
4282
|
T.type_alias do
|
|
4151
|
-
T.
|
|
4152
|
-
|
|
4153
|
-
Revox::
|
|
4283
|
+
T.any(
|
|
4284
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::HandledByUser,
|
|
4285
|
+
Revox::Internal::AnyHash
|
|
4154
4286
|
)
|
|
4155
4287
|
end
|
|
4156
|
-
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
4157
4288
|
|
|
4158
|
-
|
|
4159
|
-
|
|
4160
|
-
|
|
4161
|
-
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4162
|
-
)
|
|
4163
|
-
VOICEMAIL =
|
|
4164
|
-
T.let(
|
|
4165
|
-
:voicemail,
|
|
4166
|
-
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4167
|
-
)
|
|
4168
|
-
HUMAN =
|
|
4169
|
-
T.let(
|
|
4170
|
-
:human,
|
|
4171
|
-
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4172
|
-
)
|
|
4173
|
-
UNKNOWN =
|
|
4174
|
-
T.let(
|
|
4175
|
-
:unknown,
|
|
4176
|
-
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4177
|
-
)
|
|
4178
|
-
IOS_SCREENING_FILTER =
|
|
4179
|
-
T.let(
|
|
4180
|
-
:"ios-screening-filter",
|
|
4181
|
-
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4182
|
-
)
|
|
4289
|
+
# The database user id of the assignee.
|
|
4290
|
+
sig { returns(String) }
|
|
4291
|
+
attr_accessor :id
|
|
4183
4292
|
|
|
4184
|
-
sig
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4191
|
-
|
|
4293
|
+
sig { returns(String) }
|
|
4294
|
+
attr_accessor :email
|
|
4295
|
+
|
|
4296
|
+
sig { returns(T.nilable(String)) }
|
|
4297
|
+
attr_accessor :first_name
|
|
4298
|
+
|
|
4299
|
+
sig { returns(T.nilable(String)) }
|
|
4300
|
+
attr_accessor :last_name
|
|
4301
|
+
|
|
4302
|
+
# The team member responsible for following up on this call.
|
|
4303
|
+
sig do
|
|
4304
|
+
params(
|
|
4305
|
+
id: String,
|
|
4306
|
+
email: String,
|
|
4307
|
+
first_name: T.nilable(String),
|
|
4308
|
+
last_name: T.nilable(String)
|
|
4309
|
+
).returns(T.attached_class)
|
|
4310
|
+
end
|
|
4311
|
+
def self.new(
|
|
4312
|
+
# The database user id of the assignee.
|
|
4313
|
+
id:,
|
|
4314
|
+
email:,
|
|
4315
|
+
first_name:,
|
|
4316
|
+
last_name:
|
|
4317
|
+
)
|
|
4318
|
+
end
|
|
4319
|
+
|
|
4320
|
+
sig do
|
|
4321
|
+
override.returns(
|
|
4322
|
+
{
|
|
4323
|
+
id: String,
|
|
4324
|
+
email: String,
|
|
4325
|
+
first_name: T.nilable(String),
|
|
4326
|
+
last_name: T.nilable(String)
|
|
4327
|
+
}
|
|
4328
|
+
)
|
|
4329
|
+
end
|
|
4330
|
+
def to_hash
|
|
4331
|
+
end
|
|
4332
|
+
end
|
|
4333
|
+
|
|
4334
|
+
module Result
|
|
4335
|
+
extend Revox::Internal::Type::Enum
|
|
4336
|
+
|
|
4337
|
+
TaggedSymbol =
|
|
4338
|
+
T.type_alias do
|
|
4339
|
+
T.all(
|
|
4340
|
+
Symbol,
|
|
4341
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result
|
|
4342
|
+
)
|
|
4343
|
+
end
|
|
4344
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
4345
|
+
|
|
4346
|
+
IVR =
|
|
4347
|
+
T.let(
|
|
4348
|
+
:IVR,
|
|
4349
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4350
|
+
)
|
|
4351
|
+
VOICEMAIL =
|
|
4352
|
+
T.let(
|
|
4353
|
+
:voicemail,
|
|
4354
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4355
|
+
)
|
|
4356
|
+
HUMAN =
|
|
4357
|
+
T.let(
|
|
4358
|
+
:human,
|
|
4359
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4360
|
+
)
|
|
4361
|
+
UNKNOWN =
|
|
4362
|
+
T.let(
|
|
4363
|
+
:unknown,
|
|
4364
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4365
|
+
)
|
|
4366
|
+
IOS_SCREENING_FILTER =
|
|
4367
|
+
T.let(
|
|
4368
|
+
:"ios-screening-filter",
|
|
4369
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4370
|
+
)
|
|
4371
|
+
|
|
4372
|
+
sig do
|
|
4373
|
+
override.returns(
|
|
4374
|
+
T::Array[
|
|
4375
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::Result::TaggedSymbol
|
|
4376
|
+
]
|
|
4377
|
+
)
|
|
4378
|
+
end
|
|
4379
|
+
def self.values
|
|
4192
4380
|
end
|
|
4193
4381
|
end
|
|
4194
4382
|
|
|
@@ -4242,6 +4430,71 @@ module Revox
|
|
|
4242
4430
|
end
|
|
4243
4431
|
end
|
|
4244
4432
|
|
|
4433
|
+
class EmailLog < Revox::Internal::Type::BaseModel
|
|
4434
|
+
OrHash =
|
|
4435
|
+
T.type_alias do
|
|
4436
|
+
T.any(
|
|
4437
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::EmailLog,
|
|
4438
|
+
Revox::Internal::AnyHash
|
|
4439
|
+
)
|
|
4440
|
+
end
|
|
4441
|
+
|
|
4442
|
+
sig { returns(String) }
|
|
4443
|
+
attr_accessor :id
|
|
4444
|
+
|
|
4445
|
+
# When the email was sent.
|
|
4446
|
+
sig { returns(T.anything) }
|
|
4447
|
+
attr_accessor :created_at
|
|
4448
|
+
|
|
4449
|
+
sig { returns(String) }
|
|
4450
|
+
attr_accessor :from_address
|
|
4451
|
+
|
|
4452
|
+
sig { returns(T.nilable(String)) }
|
|
4453
|
+
attr_accessor :resend_message_id
|
|
4454
|
+
|
|
4455
|
+
sig { returns(String) }
|
|
4456
|
+
attr_accessor :subject
|
|
4457
|
+
|
|
4458
|
+
sig { returns(T::Array[String]) }
|
|
4459
|
+
attr_accessor :to_emails
|
|
4460
|
+
|
|
4461
|
+
sig do
|
|
4462
|
+
params(
|
|
4463
|
+
id: String,
|
|
4464
|
+
created_at: T.anything,
|
|
4465
|
+
from_address: String,
|
|
4466
|
+
resend_message_id: T.nilable(String),
|
|
4467
|
+
subject: String,
|
|
4468
|
+
to_emails: T::Array[String]
|
|
4469
|
+
).returns(T.attached_class)
|
|
4470
|
+
end
|
|
4471
|
+
def self.new(
|
|
4472
|
+
id:,
|
|
4473
|
+
# When the email was sent.
|
|
4474
|
+
created_at:,
|
|
4475
|
+
from_address:,
|
|
4476
|
+
resend_message_id:,
|
|
4477
|
+
subject:,
|
|
4478
|
+
to_emails:
|
|
4479
|
+
)
|
|
4480
|
+
end
|
|
4481
|
+
|
|
4482
|
+
sig do
|
|
4483
|
+
override.returns(
|
|
4484
|
+
{
|
|
4485
|
+
id: String,
|
|
4486
|
+
created_at: T.anything,
|
|
4487
|
+
from_address: String,
|
|
4488
|
+
resend_message_id: T.nilable(String),
|
|
4489
|
+
subject: String,
|
|
4490
|
+
to_emails: T::Array[String]
|
|
4491
|
+
}
|
|
4492
|
+
)
|
|
4493
|
+
end
|
|
4494
|
+
def to_hash
|
|
4495
|
+
end
|
|
4496
|
+
end
|
|
4497
|
+
|
|
4245
4498
|
# Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
|
|
4246
4499
|
# 'voicemail', 'transfer', 'ivr_no_navigate'.
|
|
4247
4500
|
module EndReason
|
|
@@ -4569,11 +4822,18 @@ module Revox
|
|
|
4569
4822
|
sig { returns(String) }
|
|
4570
4823
|
attr_accessor :message_body
|
|
4571
4824
|
|
|
4572
|
-
sig
|
|
4573
|
-
|
|
4825
|
+
sig do
|
|
4826
|
+
returns(
|
|
4827
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
|
|
4828
|
+
)
|
|
4829
|
+
end
|
|
4830
|
+
attr_accessor :provider
|
|
4574
4831
|
|
|
4575
4832
|
sig { returns(T.nilable(String)) }
|
|
4576
|
-
attr_accessor :
|
|
4833
|
+
attr_accessor :provider_message_id
|
|
4834
|
+
|
|
4835
|
+
sig { returns(String) }
|
|
4836
|
+
attr_accessor :to_phone_number
|
|
4577
4837
|
|
|
4578
4838
|
sig do
|
|
4579
4839
|
returns(
|
|
@@ -4587,8 +4847,10 @@ module Revox
|
|
|
4587
4847
|
id: String,
|
|
4588
4848
|
created_at: T.anything,
|
|
4589
4849
|
message_body: String,
|
|
4850
|
+
provider:
|
|
4851
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::OrSymbol,
|
|
4852
|
+
provider_message_id: T.nilable(String),
|
|
4590
4853
|
to_phone_number: String,
|
|
4591
|
-
twilio_message_sid: T.nilable(String),
|
|
4592
4854
|
type:
|
|
4593
4855
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Type::OrSymbol
|
|
4594
4856
|
).returns(T.attached_class)
|
|
@@ -4598,8 +4860,9 @@ module Revox
|
|
|
4598
4860
|
# When the SMS was sent.
|
|
4599
4861
|
created_at:,
|
|
4600
4862
|
message_body:,
|
|
4863
|
+
provider:,
|
|
4864
|
+
provider_message_id:,
|
|
4601
4865
|
to_phone_number:,
|
|
4602
|
-
twilio_message_sid:,
|
|
4603
4866
|
type:
|
|
4604
4867
|
)
|
|
4605
4868
|
end
|
|
@@ -4610,8 +4873,10 @@ module Revox
|
|
|
4610
4873
|
id: String,
|
|
4611
4874
|
created_at: T.anything,
|
|
4612
4875
|
message_body: String,
|
|
4876
|
+
provider:
|
|
4877
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol,
|
|
4878
|
+
provider_message_id: T.nilable(String),
|
|
4613
4879
|
to_phone_number: String,
|
|
4614
|
-
twilio_message_sid: T.nilable(String),
|
|
4615
4880
|
type:
|
|
4616
4881
|
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Type::TaggedSymbol
|
|
4617
4882
|
}
|
|
@@ -4620,6 +4885,40 @@ module Revox
|
|
|
4620
4885
|
def to_hash
|
|
4621
4886
|
end
|
|
4622
4887
|
|
|
4888
|
+
module Provider
|
|
4889
|
+
extend Revox::Internal::Type::Enum
|
|
4890
|
+
|
|
4891
|
+
TaggedSymbol =
|
|
4892
|
+
T.type_alias do
|
|
4893
|
+
T.all(
|
|
4894
|
+
Symbol,
|
|
4895
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider
|
|
4896
|
+
)
|
|
4897
|
+
end
|
|
4898
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
4899
|
+
|
|
4900
|
+
TWILIO =
|
|
4901
|
+
T.let(
|
|
4902
|
+
:twilio,
|
|
4903
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
|
|
4904
|
+
)
|
|
4905
|
+
VONAGE =
|
|
4906
|
+
T.let(
|
|
4907
|
+
:vonage,
|
|
4908
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
|
|
4909
|
+
)
|
|
4910
|
+
|
|
4911
|
+
sig do
|
|
4912
|
+
override.returns(
|
|
4913
|
+
T::Array[
|
|
4914
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SMSLog::Provider::TaggedSymbol
|
|
4915
|
+
]
|
|
4916
|
+
)
|
|
4917
|
+
end
|
|
4918
|
+
def self.values
|
|
4919
|
+
end
|
|
4920
|
+
end
|
|
4921
|
+
|
|
4623
4922
|
module Type
|
|
4624
4923
|
extend Revox::Internal::Type::Enum
|
|
4625
4924
|
|
|
@@ -4660,6 +4959,176 @@ module Revox
|
|
|
4660
4959
|
end
|
|
4661
4960
|
end
|
|
4662
4961
|
|
|
4962
|
+
class SpeechEvent < Revox::Internal::Type::BaseModel
|
|
4963
|
+
OrHash =
|
|
4964
|
+
T.type_alias do
|
|
4965
|
+
T.any(
|
|
4966
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent,
|
|
4967
|
+
Revox::Internal::AnyHash
|
|
4968
|
+
)
|
|
4969
|
+
end
|
|
4970
|
+
|
|
4971
|
+
sig { returns(String) }
|
|
4972
|
+
attr_accessor :id
|
|
4973
|
+
|
|
4974
|
+
# False when the segment was flagged as noise/blip rather than a meaningful turn.
|
|
4975
|
+
sig { returns(T::Boolean) }
|
|
4976
|
+
attr_accessor :is_real_turn
|
|
4977
|
+
|
|
4978
|
+
# Agent-only: despite the name, the whole prompt the LLM was given for this turn —
|
|
4979
|
+
# system instructions plus conversation history — as JSON.
|
|
4980
|
+
sig { returns(T.nilable(String)) }
|
|
4981
|
+
attr_accessor :llm_system_prompt
|
|
4982
|
+
|
|
4983
|
+
# Agent-only: LLM time-to-first-token for the reply, in ms.
|
|
4984
|
+
sig { returns(T.nilable(Float)) }
|
|
4985
|
+
attr_accessor :llm_ttft_ms
|
|
4986
|
+
|
|
4987
|
+
# Agent-only: the model that produced the reply — the winning leg when the LLM is
|
|
4988
|
+
# a race, which is also the model `llm_ttft_ms` describes.
|
|
4989
|
+
sig { returns(T.nilable(String)) }
|
|
4990
|
+
attr_accessor :llm_winner_model
|
|
4991
|
+
|
|
4992
|
+
# Who was speaking during this segment.
|
|
4993
|
+
sig do
|
|
4994
|
+
returns(
|
|
4995
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
|
|
4996
|
+
)
|
|
4997
|
+
end
|
|
4998
|
+
attr_accessor :speaker
|
|
4999
|
+
|
|
5000
|
+
# Milliseconds since session start when speech began.
|
|
5001
|
+
sig { returns(Float) }
|
|
5002
|
+
attr_accessor :started_speaking_at_ms
|
|
5003
|
+
|
|
5004
|
+
# Milliseconds since session start when speech ended. Null when the session ended
|
|
5005
|
+
# before the turn closed.
|
|
5006
|
+
sig { returns(T.nilable(Float)) }
|
|
5007
|
+
attr_accessor :stopped_speaking_at_ms
|
|
5008
|
+
|
|
5009
|
+
# User-only: time from end-of-speech to final transcript, in ms.
|
|
5010
|
+
sig { returns(T.nilable(Float)) }
|
|
5011
|
+
attr_accessor :stt_transcription_delay_ms
|
|
5012
|
+
|
|
5013
|
+
# Recognized text for this segment, when available.
|
|
5014
|
+
sig { returns(T.nilable(String)) }
|
|
5015
|
+
attr_accessor :transcript
|
|
5016
|
+
|
|
5017
|
+
# Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
|
|
5018
|
+
sig { returns(T.nilable(Float)) }
|
|
5019
|
+
attr_accessor :tts_ttfb_ms
|
|
5020
|
+
|
|
5021
|
+
# Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
|
|
5022
|
+
# Null on user segments.
|
|
5023
|
+
sig { returns(T.nilable(T::Boolean)) }
|
|
5024
|
+
attr_accessor :was_cut
|
|
5025
|
+
|
|
5026
|
+
sig do
|
|
5027
|
+
params(
|
|
5028
|
+
id: String,
|
|
5029
|
+
is_real_turn: T::Boolean,
|
|
5030
|
+
llm_system_prompt: T.nilable(String),
|
|
5031
|
+
llm_ttft_ms: T.nilable(Float),
|
|
5032
|
+
llm_winner_model: T.nilable(String),
|
|
5033
|
+
speaker:
|
|
5034
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::OrSymbol,
|
|
5035
|
+
started_speaking_at_ms: Float,
|
|
5036
|
+
stopped_speaking_at_ms: T.nilable(Float),
|
|
5037
|
+
stt_transcription_delay_ms: T.nilable(Float),
|
|
5038
|
+
transcript: T.nilable(String),
|
|
5039
|
+
tts_ttfb_ms: T.nilable(Float),
|
|
5040
|
+
was_cut: T.nilable(T::Boolean)
|
|
5041
|
+
).returns(T.attached_class)
|
|
5042
|
+
end
|
|
5043
|
+
def self.new(
|
|
5044
|
+
id:,
|
|
5045
|
+
# False when the segment was flagged as noise/blip rather than a meaningful turn.
|
|
5046
|
+
is_real_turn:,
|
|
5047
|
+
# Agent-only: despite the name, the whole prompt the LLM was given for this turn —
|
|
5048
|
+
# system instructions plus conversation history — as JSON.
|
|
5049
|
+
llm_system_prompt:,
|
|
5050
|
+
# Agent-only: LLM time-to-first-token for the reply, in ms.
|
|
5051
|
+
llm_ttft_ms:,
|
|
5052
|
+
# Agent-only: the model that produced the reply — the winning leg when the LLM is
|
|
5053
|
+
# a race, which is also the model `llm_ttft_ms` describes.
|
|
5054
|
+
llm_winner_model:,
|
|
5055
|
+
# Who was speaking during this segment.
|
|
5056
|
+
speaker:,
|
|
5057
|
+
# Milliseconds since session start when speech began.
|
|
5058
|
+
started_speaking_at_ms:,
|
|
5059
|
+
# Milliseconds since session start when speech ended. Null when the session ended
|
|
5060
|
+
# before the turn closed.
|
|
5061
|
+
stopped_speaking_at_ms:,
|
|
5062
|
+
# User-only: time from end-of-speech to final transcript, in ms.
|
|
5063
|
+
stt_transcription_delay_ms:,
|
|
5064
|
+
# Recognized text for this segment, when available.
|
|
5065
|
+
transcript:,
|
|
5066
|
+
# Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
|
|
5067
|
+
tts_ttfb_ms:,
|
|
5068
|
+
# Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
|
|
5069
|
+
# Null on user segments.
|
|
5070
|
+
was_cut:
|
|
5071
|
+
)
|
|
5072
|
+
end
|
|
5073
|
+
|
|
5074
|
+
sig do
|
|
5075
|
+
override.returns(
|
|
5076
|
+
{
|
|
5077
|
+
id: String,
|
|
5078
|
+
is_real_turn: T::Boolean,
|
|
5079
|
+
llm_system_prompt: T.nilable(String),
|
|
5080
|
+
llm_ttft_ms: T.nilable(Float),
|
|
5081
|
+
llm_winner_model: T.nilable(String),
|
|
5082
|
+
speaker:
|
|
5083
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol,
|
|
5084
|
+
started_speaking_at_ms: Float,
|
|
5085
|
+
stopped_speaking_at_ms: T.nilable(Float),
|
|
5086
|
+
stt_transcription_delay_ms: T.nilable(Float),
|
|
5087
|
+
transcript: T.nilable(String),
|
|
5088
|
+
tts_ttfb_ms: T.nilable(Float),
|
|
5089
|
+
was_cut: T.nilable(T::Boolean)
|
|
5090
|
+
}
|
|
5091
|
+
)
|
|
5092
|
+
end
|
|
5093
|
+
def to_hash
|
|
5094
|
+
end
|
|
5095
|
+
|
|
5096
|
+
# Who was speaking during this segment.
|
|
5097
|
+
module Speaker
|
|
5098
|
+
extend Revox::Internal::Type::Enum
|
|
5099
|
+
|
|
5100
|
+
TaggedSymbol =
|
|
5101
|
+
T.type_alias do
|
|
5102
|
+
T.all(
|
|
5103
|
+
Symbol,
|
|
5104
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker
|
|
5105
|
+
)
|
|
5106
|
+
end
|
|
5107
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
5108
|
+
|
|
5109
|
+
USER =
|
|
5110
|
+
T.let(
|
|
5111
|
+
:user,
|
|
5112
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
|
|
5113
|
+
)
|
|
5114
|
+
AGENT =
|
|
5115
|
+
T.let(
|
|
5116
|
+
:agent,
|
|
5117
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
|
|
5118
|
+
)
|
|
5119
|
+
|
|
5120
|
+
sig do
|
|
5121
|
+
override.returns(
|
|
5122
|
+
T::Array[
|
|
5123
|
+
Revox::Models::CallRetrieveResponse::Call::CallAttempt::SpeechEvent::Speaker::TaggedSymbol
|
|
5124
|
+
]
|
|
5125
|
+
)
|
|
5126
|
+
end
|
|
5127
|
+
def self.values
|
|
5128
|
+
end
|
|
5129
|
+
end
|
|
5130
|
+
end
|
|
5131
|
+
|
|
4663
5132
|
class Transcript < Revox::Internal::Type::BaseModel
|
|
4664
5133
|
OrHash =
|
|
4665
5134
|
T.type_alias do
|
|
@@ -5004,7 +5473,8 @@ module Revox
|
|
|
5004
5473
|
sig { returns(String) }
|
|
5005
5474
|
attr_accessor :calling_window_start_time
|
|
5006
5475
|
|
|
5007
|
-
# Delay between retry attempts in seconds.
|
|
5476
|
+
# Delay between retry attempts in seconds. 0 retries as soon as the calling window
|
|
5477
|
+
# allows. Default: 7200 (2 hours).
|
|
5008
5478
|
sig { returns(Integer) }
|
|
5009
5479
|
attr_accessor :retry_delay_seconds
|
|
5010
5480
|
|
|
@@ -5024,7 +5494,8 @@ module Revox
|
|
|
5024
5494
|
# timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
|
|
5025
5495
|
# Examples: '09:00', '10am'. Default: '10:00'.
|
|
5026
5496
|
calling_window_start_time:,
|
|
5027
|
-
# Delay between retry attempts in seconds.
|
|
5497
|
+
# Delay between retry attempts in seconds. 0 retries as soon as the calling window
|
|
5498
|
+
# allows. Default: 7200 (2 hours).
|
|
5028
5499
|
retry_delay_seconds:
|
|
5029
5500
|
)
|
|
5030
5501
|
end
|
|
@@ -5085,6 +5556,9 @@ module Revox
|
|
|
5085
5556
|
sig { returns(T.nilable(String)) }
|
|
5086
5557
|
attr_accessor :first_name
|
|
5087
5558
|
|
|
5559
|
+
sig { returns(T.nilable(String)) }
|
|
5560
|
+
attr_accessor :job_title
|
|
5561
|
+
|
|
5088
5562
|
sig { returns(T.nilable(String)) }
|
|
5089
5563
|
attr_accessor :last_name
|
|
5090
5564
|
|
|
@@ -5095,10 +5569,11 @@ module Revox
|
|
|
5095
5569
|
company: T.nilable(String),
|
|
5096
5570
|
email: T.nilable(String),
|
|
5097
5571
|
first_name: T.nilable(String),
|
|
5572
|
+
job_title: T.nilable(String),
|
|
5098
5573
|
last_name: T.nilable(String)
|
|
5099
5574
|
).returns(T.attached_class)
|
|
5100
5575
|
end
|
|
5101
|
-
def self.new(company:, email:, first_name:, last_name:)
|
|
5576
|
+
def self.new(company:, email:, first_name:, job_title:, last_name:)
|
|
5102
5577
|
end
|
|
5103
5578
|
|
|
5104
5579
|
sig do
|
|
@@ -5107,6 +5582,7 @@ module Revox
|
|
|
5107
5582
|
company: T.nilable(String),
|
|
5108
5583
|
email: T.nilable(String),
|
|
5109
5584
|
first_name: T.nilable(String),
|
|
5585
|
+
job_title: T.nilable(String),
|
|
5110
5586
|
last_name: T.nilable(String)
|
|
5111
5587
|
}
|
|
5112
5588
|
)
|
|
@@ -5181,6 +5657,37 @@ module Revox
|
|
|
5181
5657
|
sig { returns(T.anything) }
|
|
5182
5658
|
attr_accessor :ended_at
|
|
5183
5659
|
|
|
5660
|
+
# Whether the AI agent conducted the conversation on this attempt. False for a
|
|
5661
|
+
# silent speed-dial probe (whose agent only detects a human) and for attempts that
|
|
5662
|
+
# were never answered.
|
|
5663
|
+
sig { returns(T::Boolean) }
|
|
5664
|
+
attr_accessor :handled_by_ai
|
|
5665
|
+
|
|
5666
|
+
# Whether a human operator conducted (part of) this attempt — a jump-in takeover
|
|
5667
|
+
# or a speed-dial operator connection (both stamp human_takeover_at).
|
|
5668
|
+
sig { returns(T::Boolean) }
|
|
5669
|
+
attr_accessor :handled_by_human
|
|
5670
|
+
|
|
5671
|
+
# The team member responsible for following up on this call.
|
|
5672
|
+
sig do
|
|
5673
|
+
returns(
|
|
5674
|
+
T.nilable(
|
|
5675
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser
|
|
5676
|
+
)
|
|
5677
|
+
)
|
|
5678
|
+
end
|
|
5679
|
+
attr_reader :handled_by_user
|
|
5680
|
+
|
|
5681
|
+
sig do
|
|
5682
|
+
params(
|
|
5683
|
+
handled_by_user:
|
|
5684
|
+
T.nilable(
|
|
5685
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser::OrHash
|
|
5686
|
+
)
|
|
5687
|
+
).void
|
|
5688
|
+
end
|
|
5689
|
+
attr_writer :handled_by_user
|
|
5690
|
+
|
|
5184
5691
|
# The phone number that was called. Formatted in E.164 format. Example:
|
|
5185
5692
|
# +1234567890
|
|
5186
5693
|
sig { returns(String) }
|
|
@@ -5215,6 +5722,19 @@ module Revox
|
|
|
5215
5722
|
sig { returns(T.nilable(T::Array[String])) }
|
|
5216
5723
|
attr_accessor :assistants_used
|
|
5217
5724
|
|
|
5725
|
+
# Notification emails sent in connection with the call, ordered oldest first
|
|
5726
|
+
# (from/to addresses, subject, sent time).
|
|
5727
|
+
sig do
|
|
5728
|
+
returns(
|
|
5729
|
+
T.nilable(
|
|
5730
|
+
T::Array[
|
|
5731
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EmailLog
|
|
5732
|
+
]
|
|
5733
|
+
)
|
|
5734
|
+
)
|
|
5735
|
+
end
|
|
5736
|
+
attr_accessor :email_log
|
|
5737
|
+
|
|
5218
5738
|
# Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
|
|
5219
5739
|
# 'voicemail', 'transfer', 'ivr_no_navigate'.
|
|
5220
5740
|
sig do
|
|
@@ -5248,21 +5768,35 @@ module Revox
|
|
|
5248
5768
|
)
|
|
5249
5769
|
)
|
|
5250
5770
|
end
|
|
5251
|
-
attr_accessor :post_call_transcript
|
|
5771
|
+
attr_accessor :post_call_transcript
|
|
5772
|
+
|
|
5773
|
+
# Automatic SMS sent after the call (voicemail and after-call), ordered oldest
|
|
5774
|
+
# first. The in-call `send_sms` is excluded — it already appears in the transcript
|
|
5775
|
+
# as a tool call.
|
|
5776
|
+
sig do
|
|
5777
|
+
returns(
|
|
5778
|
+
T.nilable(
|
|
5779
|
+
T::Array[
|
|
5780
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog
|
|
5781
|
+
]
|
|
5782
|
+
)
|
|
5783
|
+
)
|
|
5784
|
+
end
|
|
5785
|
+
attr_accessor :sms_log
|
|
5252
5786
|
|
|
5253
|
-
#
|
|
5254
|
-
#
|
|
5255
|
-
#
|
|
5787
|
+
# Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
|
|
5788
|
+
# ordered by started_speaking_at_ms. Empty for calls recorded before this was
|
|
5789
|
+
# tracked or for realtime sessions that don't emit them.
|
|
5256
5790
|
sig do
|
|
5257
5791
|
returns(
|
|
5258
5792
|
T.nilable(
|
|
5259
5793
|
T::Array[
|
|
5260
|
-
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::
|
|
5794
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent
|
|
5261
5795
|
]
|
|
5262
5796
|
)
|
|
5263
5797
|
)
|
|
5264
5798
|
end
|
|
5265
|
-
attr_accessor :
|
|
5799
|
+
attr_accessor :speech_events
|
|
5266
5800
|
|
|
5267
5801
|
# The data extracted from the call, using the structured output config from the
|
|
5268
5802
|
# parent call object.
|
|
@@ -5292,6 +5826,12 @@ module Revox
|
|
|
5292
5826
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::DialError::OrSymbol
|
|
5293
5827
|
),
|
|
5294
5828
|
ended_at: T.anything,
|
|
5829
|
+
handled_by_ai: T::Boolean,
|
|
5830
|
+
handled_by_human: T::Boolean,
|
|
5831
|
+
handled_by_user:
|
|
5832
|
+
T.nilable(
|
|
5833
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser::OrHash
|
|
5834
|
+
),
|
|
5295
5835
|
phone_number: String,
|
|
5296
5836
|
recording_url: T.nilable(String),
|
|
5297
5837
|
result:
|
|
@@ -5302,6 +5842,12 @@ module Revox
|
|
|
5302
5842
|
status:
|
|
5303
5843
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::Status::OrSymbol,
|
|
5304
5844
|
assistants_used: T.nilable(T::Array[String]),
|
|
5845
|
+
email_log:
|
|
5846
|
+
T.nilable(
|
|
5847
|
+
T::Array[
|
|
5848
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EmailLog::OrHash
|
|
5849
|
+
]
|
|
5850
|
+
),
|
|
5305
5851
|
end_reason:
|
|
5306
5852
|
T.nilable(
|
|
5307
5853
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EndReason::OrSymbol
|
|
@@ -5322,6 +5868,12 @@ module Revox
|
|
|
5322
5868
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::OrHash
|
|
5323
5869
|
]
|
|
5324
5870
|
),
|
|
5871
|
+
speech_events:
|
|
5872
|
+
T.nilable(
|
|
5873
|
+
T::Array[
|
|
5874
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::OrHash
|
|
5875
|
+
]
|
|
5876
|
+
),
|
|
5325
5877
|
structured_output: T.nilable(T::Hash[Symbol, T.anything]),
|
|
5326
5878
|
transcript:
|
|
5327
5879
|
T.nilable(
|
|
@@ -5340,6 +5892,15 @@ module Revox
|
|
|
5340
5892
|
dial_error:,
|
|
5341
5893
|
# The time the call ended.
|
|
5342
5894
|
ended_at:,
|
|
5895
|
+
# Whether the AI agent conducted the conversation on this attempt. False for a
|
|
5896
|
+
# silent speed-dial probe (whose agent only detects a human) and for attempts that
|
|
5897
|
+
# were never answered.
|
|
5898
|
+
handled_by_ai:,
|
|
5899
|
+
# Whether a human operator conducted (part of) this attempt — a jump-in takeover
|
|
5900
|
+
# or a speed-dial operator connection (both stamp human_takeover_at).
|
|
5901
|
+
handled_by_human:,
|
|
5902
|
+
# The team member responsible for following up on this call.
|
|
5903
|
+
handled_by_user:,
|
|
5343
5904
|
# The phone number that was called. Formatted in E.164 format. Example:
|
|
5344
5905
|
# +1234567890
|
|
5345
5906
|
phone_number:,
|
|
@@ -5352,6 +5913,9 @@ module Revox
|
|
|
5352
5913
|
status:,
|
|
5353
5914
|
# Assistant node ids entered during this attempt, in traversal order.
|
|
5354
5915
|
assistants_used: nil,
|
|
5916
|
+
# Notification emails sent in connection with the call, ordered oldest first
|
|
5917
|
+
# (from/to addresses, subject, sent time).
|
|
5918
|
+
email_log: nil,
|
|
5355
5919
|
# Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
|
|
5356
5920
|
# 'voicemail', 'transfer', 'ivr_no_navigate'.
|
|
5357
5921
|
end_reason: nil,
|
|
@@ -5365,6 +5929,10 @@ module Revox
|
|
|
5365
5929
|
# first. The in-call `send_sms` is excluded — it already appears in the transcript
|
|
5366
5930
|
# as a tool call.
|
|
5367
5931
|
sms_log: nil,
|
|
5932
|
+
# Per-turn speech segments (VAD-derived) with timing and pipeline latencies,
|
|
5933
|
+
# ordered by started_speaking_at_ms. Empty for calls recorded before this was
|
|
5934
|
+
# tracked or for realtime sessions that don't emit them.
|
|
5935
|
+
speech_events: nil,
|
|
5368
5936
|
# The data extracted from the call, using the structured output config from the
|
|
5369
5937
|
# parent call object.
|
|
5370
5938
|
structured_output: nil,
|
|
@@ -5383,6 +5951,12 @@ module Revox
|
|
|
5383
5951
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::DialError::TaggedSymbol
|
|
5384
5952
|
),
|
|
5385
5953
|
ended_at: T.anything,
|
|
5954
|
+
handled_by_ai: T::Boolean,
|
|
5955
|
+
handled_by_human: T::Boolean,
|
|
5956
|
+
handled_by_user:
|
|
5957
|
+
T.nilable(
|
|
5958
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser
|
|
5959
|
+
),
|
|
5386
5960
|
phone_number: String,
|
|
5387
5961
|
recording_url: T.nilable(String),
|
|
5388
5962
|
result:
|
|
@@ -5393,6 +5967,12 @@ module Revox
|
|
|
5393
5967
|
status:
|
|
5394
5968
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::Status::TaggedSymbol,
|
|
5395
5969
|
assistants_used: T.nilable(T::Array[String]),
|
|
5970
|
+
email_log:
|
|
5971
|
+
T.nilable(
|
|
5972
|
+
T::Array[
|
|
5973
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EmailLog
|
|
5974
|
+
]
|
|
5975
|
+
),
|
|
5396
5976
|
end_reason:
|
|
5397
5977
|
T.nilable(
|
|
5398
5978
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EndReason::TaggedSymbol
|
|
@@ -5413,6 +5993,12 @@ module Revox
|
|
|
5413
5993
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog
|
|
5414
5994
|
]
|
|
5415
5995
|
),
|
|
5996
|
+
speech_events:
|
|
5997
|
+
T.nilable(
|
|
5998
|
+
T::Array[
|
|
5999
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent
|
|
6000
|
+
]
|
|
6001
|
+
),
|
|
5416
6002
|
structured_output: T.nilable(T::Hash[Symbol, T.anything]),
|
|
5417
6003
|
transcript:
|
|
5418
6004
|
T.nilable(
|
|
@@ -5491,6 +6077,60 @@ module Revox
|
|
|
5491
6077
|
end
|
|
5492
6078
|
end
|
|
5493
6079
|
|
|
6080
|
+
class HandledByUser < Revox::Internal::Type::BaseModel
|
|
6081
|
+
OrHash =
|
|
6082
|
+
T.type_alias do
|
|
6083
|
+
T.any(
|
|
6084
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::HandledByUser,
|
|
6085
|
+
Revox::Internal::AnyHash
|
|
6086
|
+
)
|
|
6087
|
+
end
|
|
6088
|
+
|
|
6089
|
+
# The database user id of the assignee.
|
|
6090
|
+
sig { returns(String) }
|
|
6091
|
+
attr_accessor :id
|
|
6092
|
+
|
|
6093
|
+
sig { returns(String) }
|
|
6094
|
+
attr_accessor :email
|
|
6095
|
+
|
|
6096
|
+
sig { returns(T.nilable(String)) }
|
|
6097
|
+
attr_accessor :first_name
|
|
6098
|
+
|
|
6099
|
+
sig { returns(T.nilable(String)) }
|
|
6100
|
+
attr_accessor :last_name
|
|
6101
|
+
|
|
6102
|
+
# The team member responsible for following up on this call.
|
|
6103
|
+
sig do
|
|
6104
|
+
params(
|
|
6105
|
+
id: String,
|
|
6106
|
+
email: String,
|
|
6107
|
+
first_name: T.nilable(String),
|
|
6108
|
+
last_name: T.nilable(String)
|
|
6109
|
+
).returns(T.attached_class)
|
|
6110
|
+
end
|
|
6111
|
+
def self.new(
|
|
6112
|
+
# The database user id of the assignee.
|
|
6113
|
+
id:,
|
|
6114
|
+
email:,
|
|
6115
|
+
first_name:,
|
|
6116
|
+
last_name:
|
|
6117
|
+
)
|
|
6118
|
+
end
|
|
6119
|
+
|
|
6120
|
+
sig do
|
|
6121
|
+
override.returns(
|
|
6122
|
+
{
|
|
6123
|
+
id: String,
|
|
6124
|
+
email: String,
|
|
6125
|
+
first_name: T.nilable(String),
|
|
6126
|
+
last_name: T.nilable(String)
|
|
6127
|
+
}
|
|
6128
|
+
)
|
|
6129
|
+
end
|
|
6130
|
+
def to_hash
|
|
6131
|
+
end
|
|
6132
|
+
end
|
|
6133
|
+
|
|
5494
6134
|
module Result
|
|
5495
6135
|
extend Revox::Internal::Type::Enum
|
|
5496
6136
|
|
|
@@ -5590,6 +6230,71 @@ module Revox
|
|
|
5590
6230
|
end
|
|
5591
6231
|
end
|
|
5592
6232
|
|
|
6233
|
+
class EmailLog < Revox::Internal::Type::BaseModel
|
|
6234
|
+
OrHash =
|
|
6235
|
+
T.type_alias do
|
|
6236
|
+
T.any(
|
|
6237
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::EmailLog,
|
|
6238
|
+
Revox::Internal::AnyHash
|
|
6239
|
+
)
|
|
6240
|
+
end
|
|
6241
|
+
|
|
6242
|
+
sig { returns(String) }
|
|
6243
|
+
attr_accessor :id
|
|
6244
|
+
|
|
6245
|
+
# When the email was sent.
|
|
6246
|
+
sig { returns(T.anything) }
|
|
6247
|
+
attr_accessor :created_at
|
|
6248
|
+
|
|
6249
|
+
sig { returns(String) }
|
|
6250
|
+
attr_accessor :from_address
|
|
6251
|
+
|
|
6252
|
+
sig { returns(T.nilable(String)) }
|
|
6253
|
+
attr_accessor :resend_message_id
|
|
6254
|
+
|
|
6255
|
+
sig { returns(String) }
|
|
6256
|
+
attr_accessor :subject
|
|
6257
|
+
|
|
6258
|
+
sig { returns(T::Array[String]) }
|
|
6259
|
+
attr_accessor :to_emails
|
|
6260
|
+
|
|
6261
|
+
sig do
|
|
6262
|
+
params(
|
|
6263
|
+
id: String,
|
|
6264
|
+
created_at: T.anything,
|
|
6265
|
+
from_address: String,
|
|
6266
|
+
resend_message_id: T.nilable(String),
|
|
6267
|
+
subject: String,
|
|
6268
|
+
to_emails: T::Array[String]
|
|
6269
|
+
).returns(T.attached_class)
|
|
6270
|
+
end
|
|
6271
|
+
def self.new(
|
|
6272
|
+
id:,
|
|
6273
|
+
# When the email was sent.
|
|
6274
|
+
created_at:,
|
|
6275
|
+
from_address:,
|
|
6276
|
+
resend_message_id:,
|
|
6277
|
+
subject:,
|
|
6278
|
+
to_emails:
|
|
6279
|
+
)
|
|
6280
|
+
end
|
|
6281
|
+
|
|
6282
|
+
sig do
|
|
6283
|
+
override.returns(
|
|
6284
|
+
{
|
|
6285
|
+
id: String,
|
|
6286
|
+
created_at: T.anything,
|
|
6287
|
+
from_address: String,
|
|
6288
|
+
resend_message_id: T.nilable(String),
|
|
6289
|
+
subject: String,
|
|
6290
|
+
to_emails: T::Array[String]
|
|
6291
|
+
}
|
|
6292
|
+
)
|
|
6293
|
+
end
|
|
6294
|
+
def to_hash
|
|
6295
|
+
end
|
|
6296
|
+
end
|
|
6297
|
+
|
|
5593
6298
|
# Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
|
|
5594
6299
|
# 'voicemail', 'transfer', 'ivr_no_navigate'.
|
|
5595
6300
|
module EndReason
|
|
@@ -5917,11 +6622,18 @@ module Revox
|
|
|
5917
6622
|
sig { returns(String) }
|
|
5918
6623
|
attr_accessor :message_body
|
|
5919
6624
|
|
|
5920
|
-
sig
|
|
5921
|
-
|
|
6625
|
+
sig do
|
|
6626
|
+
returns(
|
|
6627
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
|
|
6628
|
+
)
|
|
6629
|
+
end
|
|
6630
|
+
attr_accessor :provider
|
|
5922
6631
|
|
|
5923
6632
|
sig { returns(T.nilable(String)) }
|
|
5924
|
-
attr_accessor :
|
|
6633
|
+
attr_accessor :provider_message_id
|
|
6634
|
+
|
|
6635
|
+
sig { returns(String) }
|
|
6636
|
+
attr_accessor :to_phone_number
|
|
5925
6637
|
|
|
5926
6638
|
sig do
|
|
5927
6639
|
returns(
|
|
@@ -5935,8 +6647,10 @@ module Revox
|
|
|
5935
6647
|
id: String,
|
|
5936
6648
|
created_at: T.anything,
|
|
5937
6649
|
message_body: String,
|
|
6650
|
+
provider:
|
|
6651
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::OrSymbol,
|
|
6652
|
+
provider_message_id: T.nilable(String),
|
|
5938
6653
|
to_phone_number: String,
|
|
5939
|
-
twilio_message_sid: T.nilable(String),
|
|
5940
6654
|
type:
|
|
5941
6655
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Type::OrSymbol
|
|
5942
6656
|
).returns(T.attached_class)
|
|
@@ -5946,8 +6660,9 @@ module Revox
|
|
|
5946
6660
|
# When the SMS was sent.
|
|
5947
6661
|
created_at:,
|
|
5948
6662
|
message_body:,
|
|
6663
|
+
provider:,
|
|
6664
|
+
provider_message_id:,
|
|
5949
6665
|
to_phone_number:,
|
|
5950
|
-
twilio_message_sid:,
|
|
5951
6666
|
type:
|
|
5952
6667
|
)
|
|
5953
6668
|
end
|
|
@@ -5958,8 +6673,10 @@ module Revox
|
|
|
5958
6673
|
id: String,
|
|
5959
6674
|
created_at: T.anything,
|
|
5960
6675
|
message_body: String,
|
|
6676
|
+
provider:
|
|
6677
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol,
|
|
6678
|
+
provider_message_id: T.nilable(String),
|
|
5961
6679
|
to_phone_number: String,
|
|
5962
|
-
twilio_message_sid: T.nilable(String),
|
|
5963
6680
|
type:
|
|
5964
6681
|
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Type::TaggedSymbol
|
|
5965
6682
|
}
|
|
@@ -5968,6 +6685,40 @@ module Revox
|
|
|
5968
6685
|
def to_hash
|
|
5969
6686
|
end
|
|
5970
6687
|
|
|
6688
|
+
module Provider
|
|
6689
|
+
extend Revox::Internal::Type::Enum
|
|
6690
|
+
|
|
6691
|
+
TaggedSymbol =
|
|
6692
|
+
T.type_alias do
|
|
6693
|
+
T.all(
|
|
6694
|
+
Symbol,
|
|
6695
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider
|
|
6696
|
+
)
|
|
6697
|
+
end
|
|
6698
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
6699
|
+
|
|
6700
|
+
TWILIO =
|
|
6701
|
+
T.let(
|
|
6702
|
+
:twilio,
|
|
6703
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
|
|
6704
|
+
)
|
|
6705
|
+
VONAGE =
|
|
6706
|
+
T.let(
|
|
6707
|
+
:vonage,
|
|
6708
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
|
|
6709
|
+
)
|
|
6710
|
+
|
|
6711
|
+
sig do
|
|
6712
|
+
override.returns(
|
|
6713
|
+
T::Array[
|
|
6714
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SMSLog::Provider::TaggedSymbol
|
|
6715
|
+
]
|
|
6716
|
+
)
|
|
6717
|
+
end
|
|
6718
|
+
def self.values
|
|
6719
|
+
end
|
|
6720
|
+
end
|
|
6721
|
+
|
|
5971
6722
|
module Type
|
|
5972
6723
|
extend Revox::Internal::Type::Enum
|
|
5973
6724
|
|
|
@@ -6008,6 +6759,176 @@ module Revox
|
|
|
6008
6759
|
end
|
|
6009
6760
|
end
|
|
6010
6761
|
|
|
6762
|
+
class SpeechEvent < Revox::Internal::Type::BaseModel
|
|
6763
|
+
OrHash =
|
|
6764
|
+
T.type_alias do
|
|
6765
|
+
T.any(
|
|
6766
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent,
|
|
6767
|
+
Revox::Internal::AnyHash
|
|
6768
|
+
)
|
|
6769
|
+
end
|
|
6770
|
+
|
|
6771
|
+
sig { returns(String) }
|
|
6772
|
+
attr_accessor :id
|
|
6773
|
+
|
|
6774
|
+
# False when the segment was flagged as noise/blip rather than a meaningful turn.
|
|
6775
|
+
sig { returns(T::Boolean) }
|
|
6776
|
+
attr_accessor :is_real_turn
|
|
6777
|
+
|
|
6778
|
+
# Agent-only: despite the name, the whole prompt the LLM was given for this turn —
|
|
6779
|
+
# system instructions plus conversation history — as JSON.
|
|
6780
|
+
sig { returns(T.nilable(String)) }
|
|
6781
|
+
attr_accessor :llm_system_prompt
|
|
6782
|
+
|
|
6783
|
+
# Agent-only: LLM time-to-first-token for the reply, in ms.
|
|
6784
|
+
sig { returns(T.nilable(Float)) }
|
|
6785
|
+
attr_accessor :llm_ttft_ms
|
|
6786
|
+
|
|
6787
|
+
# Agent-only: the model that produced the reply — the winning leg when the LLM is
|
|
6788
|
+
# a race, which is also the model `llm_ttft_ms` describes.
|
|
6789
|
+
sig { returns(T.nilable(String)) }
|
|
6790
|
+
attr_accessor :llm_winner_model
|
|
6791
|
+
|
|
6792
|
+
# Who was speaking during this segment.
|
|
6793
|
+
sig do
|
|
6794
|
+
returns(
|
|
6795
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
|
|
6796
|
+
)
|
|
6797
|
+
end
|
|
6798
|
+
attr_accessor :speaker
|
|
6799
|
+
|
|
6800
|
+
# Milliseconds since session start when speech began.
|
|
6801
|
+
sig { returns(Float) }
|
|
6802
|
+
attr_accessor :started_speaking_at_ms
|
|
6803
|
+
|
|
6804
|
+
# Milliseconds since session start when speech ended. Null when the session ended
|
|
6805
|
+
# before the turn closed.
|
|
6806
|
+
sig { returns(T.nilable(Float)) }
|
|
6807
|
+
attr_accessor :stopped_speaking_at_ms
|
|
6808
|
+
|
|
6809
|
+
# User-only: time from end-of-speech to final transcript, in ms.
|
|
6810
|
+
sig { returns(T.nilable(Float)) }
|
|
6811
|
+
attr_accessor :stt_transcription_delay_ms
|
|
6812
|
+
|
|
6813
|
+
# Recognized text for this segment, when available.
|
|
6814
|
+
sig { returns(T.nilable(String)) }
|
|
6815
|
+
attr_accessor :transcript
|
|
6816
|
+
|
|
6817
|
+
# Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
|
|
6818
|
+
sig { returns(T.nilable(Float)) }
|
|
6819
|
+
attr_accessor :tts_ttfb_ms
|
|
6820
|
+
|
|
6821
|
+
# Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
|
|
6822
|
+
# Null on user segments.
|
|
6823
|
+
sig { returns(T.nilable(T::Boolean)) }
|
|
6824
|
+
attr_accessor :was_cut
|
|
6825
|
+
|
|
6826
|
+
sig do
|
|
6827
|
+
params(
|
|
6828
|
+
id: String,
|
|
6829
|
+
is_real_turn: T::Boolean,
|
|
6830
|
+
llm_system_prompt: T.nilable(String),
|
|
6831
|
+
llm_ttft_ms: T.nilable(Float),
|
|
6832
|
+
llm_winner_model: T.nilable(String),
|
|
6833
|
+
speaker:
|
|
6834
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::OrSymbol,
|
|
6835
|
+
started_speaking_at_ms: Float,
|
|
6836
|
+
stopped_speaking_at_ms: T.nilable(Float),
|
|
6837
|
+
stt_transcription_delay_ms: T.nilable(Float),
|
|
6838
|
+
transcript: T.nilable(String),
|
|
6839
|
+
tts_ttfb_ms: T.nilable(Float),
|
|
6840
|
+
was_cut: T.nilable(T::Boolean)
|
|
6841
|
+
).returns(T.attached_class)
|
|
6842
|
+
end
|
|
6843
|
+
def self.new(
|
|
6844
|
+
id:,
|
|
6845
|
+
# False when the segment was flagged as noise/blip rather than a meaningful turn.
|
|
6846
|
+
is_real_turn:,
|
|
6847
|
+
# Agent-only: despite the name, the whole prompt the LLM was given for this turn —
|
|
6848
|
+
# system instructions plus conversation history — as JSON.
|
|
6849
|
+
llm_system_prompt:,
|
|
6850
|
+
# Agent-only: LLM time-to-first-token for the reply, in ms.
|
|
6851
|
+
llm_ttft_ms:,
|
|
6852
|
+
# Agent-only: the model that produced the reply — the winning leg when the LLM is
|
|
6853
|
+
# a race, which is also the model `llm_ttft_ms` describes.
|
|
6854
|
+
llm_winner_model:,
|
|
6855
|
+
# Who was speaking during this segment.
|
|
6856
|
+
speaker:,
|
|
6857
|
+
# Milliseconds since session start when speech began.
|
|
6858
|
+
started_speaking_at_ms:,
|
|
6859
|
+
# Milliseconds since session start when speech ended. Null when the session ended
|
|
6860
|
+
# before the turn closed.
|
|
6861
|
+
stopped_speaking_at_ms:,
|
|
6862
|
+
# User-only: time from end-of-speech to final transcript, in ms.
|
|
6863
|
+
stt_transcription_delay_ms:,
|
|
6864
|
+
# Recognized text for this segment, when available.
|
|
6865
|
+
transcript:,
|
|
6866
|
+
# Agent-only: TTS time-to-first-audio-byte for the reply, in ms.
|
|
6867
|
+
tts_ttfb_ms:,
|
|
6868
|
+
# Agent-only: true when the agent's audio was interrupted (real or auto-resumed).
|
|
6869
|
+
# Null on user segments.
|
|
6870
|
+
was_cut:
|
|
6871
|
+
)
|
|
6872
|
+
end
|
|
6873
|
+
|
|
6874
|
+
sig do
|
|
6875
|
+
override.returns(
|
|
6876
|
+
{
|
|
6877
|
+
id: String,
|
|
6878
|
+
is_real_turn: T::Boolean,
|
|
6879
|
+
llm_system_prompt: T.nilable(String),
|
|
6880
|
+
llm_ttft_ms: T.nilable(Float),
|
|
6881
|
+
llm_winner_model: T.nilable(String),
|
|
6882
|
+
speaker:
|
|
6883
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol,
|
|
6884
|
+
started_speaking_at_ms: Float,
|
|
6885
|
+
stopped_speaking_at_ms: T.nilable(Float),
|
|
6886
|
+
stt_transcription_delay_ms: T.nilable(Float),
|
|
6887
|
+
transcript: T.nilable(String),
|
|
6888
|
+
tts_ttfb_ms: T.nilable(Float),
|
|
6889
|
+
was_cut: T.nilable(T::Boolean)
|
|
6890
|
+
}
|
|
6891
|
+
)
|
|
6892
|
+
end
|
|
6893
|
+
def to_hash
|
|
6894
|
+
end
|
|
6895
|
+
|
|
6896
|
+
# Who was speaking during this segment.
|
|
6897
|
+
module Speaker
|
|
6898
|
+
extend Revox::Internal::Type::Enum
|
|
6899
|
+
|
|
6900
|
+
TaggedSymbol =
|
|
6901
|
+
T.type_alias do
|
|
6902
|
+
T.all(
|
|
6903
|
+
Symbol,
|
|
6904
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker
|
|
6905
|
+
)
|
|
6906
|
+
end
|
|
6907
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
6908
|
+
|
|
6909
|
+
USER =
|
|
6910
|
+
T.let(
|
|
6911
|
+
:user,
|
|
6912
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
|
|
6913
|
+
)
|
|
6914
|
+
AGENT =
|
|
6915
|
+
T.let(
|
|
6916
|
+
:agent,
|
|
6917
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
|
|
6918
|
+
)
|
|
6919
|
+
|
|
6920
|
+
sig do
|
|
6921
|
+
override.returns(
|
|
6922
|
+
T::Array[
|
|
6923
|
+
Revox::Models::CallRetrieveResponse::Call::LastCallAttempt::SpeechEvent::Speaker::TaggedSymbol
|
|
6924
|
+
]
|
|
6925
|
+
)
|
|
6926
|
+
end
|
|
6927
|
+
def self.values
|
|
6928
|
+
end
|
|
6929
|
+
end
|
|
6930
|
+
end
|
|
6931
|
+
|
|
6011
6932
|
class Transcript < Revox::Internal::Type::BaseModel
|
|
6012
6933
|
OrHash =
|
|
6013
6934
|
T.type_alias do
|
|
@@ -6513,6 +7434,11 @@ module Revox
|
|
|
6513
7434
|
:post_processing,
|
|
6514
7435
|
Revox::Models::CallRetrieveResponse::Call::Status::TaggedSymbol
|
|
6515
7436
|
)
|
|
7437
|
+
NOT_LAUNCHED =
|
|
7438
|
+
T.let(
|
|
7439
|
+
:not_launched,
|
|
7440
|
+
Revox::Models::CallRetrieveResponse::Call::Status::TaggedSymbol
|
|
7441
|
+
)
|
|
6516
7442
|
SCHEDULED =
|
|
6517
7443
|
T.let(
|
|
6518
7444
|
:scheduled,
|
|
@@ -6580,21 +7506,6 @@ module Revox
|
|
|
6580
7506
|
:requested_callback_later,
|
|
6581
7507
|
Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
|
|
6582
7508
|
)
|
|
6583
|
-
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
6584
|
-
T.let(
|
|
6585
|
-
:requested_callback_new_number,
|
|
6586
|
-
Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
|
|
6587
|
-
)
|
|
6588
|
-
DO_NOT_CONTACT =
|
|
6589
|
-
T.let(
|
|
6590
|
-
:do_not_contact,
|
|
6591
|
-
Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
|
|
6592
|
-
)
|
|
6593
|
-
AI_AVERSE =
|
|
6594
|
-
T.let(
|
|
6595
|
-
:ai_averse,
|
|
6596
|
-
Revox::Models::CallRetrieveResponse::Call::Outcome::TaggedSymbol
|
|
6597
|
-
)
|
|
6598
7509
|
|
|
6599
7510
|
sig do
|
|
6600
7511
|
override.returns(
|