revox 0.2.0 → 0.3.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 +10 -0
- data/README.md +1 -1
- data/lib/revox/client.rb +8 -0
- data/lib/revox/internal/type/base_model.rb +3 -3
- data/lib/revox/models/assistant_clone_params.rb +20 -0
- data/lib/revox/models/assistant_clone_response.rb +1594 -0
- data/lib/revox/models/auth_status_retrieve_params.rb +14 -0
- data/lib/revox/models/auth_status_retrieve_response.rb +17 -0
- data/lib/revox/models/call_cancel_params.rb +20 -0
- data/lib/revox/models/call_cancel_response.rb +16 -0
- data/lib/revox/models/call_create_response.rb +11 -1
- data/lib/revox/models/call_export_params.rb +205 -0
- data/lib/revox/models/call_export_response.rb +22 -0
- data/lib/revox/models/call_pause_params.rb +20 -0
- data/lib/revox/models/call_pause_response.rb +16 -0
- data/lib/revox/models/call_phone_history_params.rb +14 -0
- data/lib/revox/models/call_phone_history_response.rb +98 -0
- data/lib/revox/models/call_resume_params.rb +20 -0
- data/lib/revox/models/call_resume_response.rb +16 -0
- data/lib/revox/models/call_retrieve_response.rb +11 -1
- data/lib/revox/models/call_search_params.rb +171 -0
- data/lib/revox/models/call_search_response.rb +3114 -0
- data/lib/revox/models/campaign_get_rows_response.rb +11 -1
- data/lib/revox/models/campaign_launch_params.rb +20 -0
- data/lib/revox/models/campaign_launch_response.rb +2030 -0
- data/lib/revox/models/campaign_pause_params.rb +20 -0
- data/lib/revox/models/campaign_pause_response.rb +16 -0
- data/lib/revox/models/campaign_resume_params.rb +20 -0
- data/lib/revox/models/campaign_resume_response.rb +16 -0
- data/lib/revox/models/campaign_statistics_params.rb +20 -0
- data/lib/revox/models/campaign_statistics_response.rb +486 -0
- data/lib/revox/models/campaign_update_params.rb +234 -0
- data/lib/revox/models/campaign_update_response.rb +2030 -0
- data/lib/revox/models/phone_number_delete_params.rb +20 -0
- data/lib/revox/models/phone_number_delete_response.rb +16 -0
- data/lib/revox/models/phone_number_list_params.rb +14 -0
- data/lib/revox/models/phone_number_list_response.rb +1777 -0
- data/lib/revox/models/phone_number_update_params.rb +32 -0
- data/lib/revox/models/phone_number_update_response.rb +1777 -0
- data/lib/revox/models/user_retrieve_params.rb +14 -0
- data/lib/revox/models/user_retrieve_response.rb +99 -0
- data/lib/revox/models/voice_clone_params.rb +78 -0
- data/lib/revox/models/voice_clone_response.rb +40 -0
- data/lib/revox/models/voice_delete_params.rb +20 -0
- data/lib/revox/models/voice_delete_response.rb +16 -0
- data/lib/revox/models.rb +37 -1
- data/lib/revox/resources/assistants.rb +21 -0
- data/lib/revox/resources/auth_status.rb +32 -0
- data/lib/revox/resources/call.rb +145 -0
- data/lib/revox/resources/campaigns.rb +131 -0
- data/lib/revox/resources/phone_numbers.rb +74 -0
- data/lib/revox/resources/users.rb +17 -3
- data/lib/revox/resources/voices.rb +50 -0
- data/lib/revox/version.rb +1 -1
- data/lib/revox.rb +40 -5
- data/rbi/revox/client.rbi +6 -0
- data/rbi/revox/models/assistant_clone_params.rbi +33 -0
- data/rbi/revox/models/assistant_clone_response.rbi +3341 -0
- data/rbi/revox/models/auth_status_retrieve_params.rbi +27 -0
- data/rbi/revox/models/auth_status_retrieve_response.rbi +30 -0
- data/rbi/revox/models/call_cancel_params.rbi +33 -0
- data/rbi/revox/models/call_cancel_response.rbi +23 -0
- data/rbi/revox/models/call_create_response.rbi +12 -0
- data/rbi/revox/models/call_export_params.rbi +456 -0
- data/rbi/revox/models/call_export_response.rbi +26 -0
- data/rbi/revox/models/call_pause_params.rbi +31 -0
- data/rbi/revox/models/call_pause_response.rbi +23 -0
- data/rbi/revox/models/call_phone_history_params.rbi +27 -0
- data/rbi/revox/models/call_phone_history_response.rbi +224 -0
- data/rbi/revox/models/call_resume_params.rbi +33 -0
- data/rbi/revox/models/call_resume_response.rbi +23 -0
- data/rbi/revox/models/call_retrieve_response.rbi +12 -0
- data/rbi/revox/models/call_search_params.rbi +288 -0
- data/rbi/revox/models/call_search_response.rbi +6593 -0
- data/rbi/revox/models/campaign_get_rows_response.rbi +12 -0
- data/rbi/revox/models/campaign_launch_params.rbi +33 -0
- data/rbi/revox/models/campaign_launch_response.rbi +4170 -0
- data/rbi/revox/models/campaign_pause_params.rbi +33 -0
- data/rbi/revox/models/campaign_pause_response.rbi +23 -0
- data/rbi/revox/models/campaign_resume_params.rbi +33 -0
- data/rbi/revox/models/campaign_resume_response.rbi +23 -0
- data/rbi/revox/models/campaign_statistics_params.rbi +33 -0
- data/rbi/revox/models/campaign_statistics_response.rbi +1011 -0
- data/rbi/revox/models/campaign_update_params.rbi +431 -0
- data/rbi/revox/models/campaign_update_response.rbi +4170 -0
- data/rbi/revox/models/phone_number_delete_params.rbi +33 -0
- data/rbi/revox/models/phone_number_delete_response.rbi +26 -0
- data/rbi/revox/models/phone_number_list_params.rbi +27 -0
- data/rbi/revox/models/phone_number_list_response.rbi +3680 -0
- data/rbi/revox/models/phone_number_update_params.rbi +53 -0
- data/rbi/revox/models/phone_number_update_response.rbi +3683 -0
- data/rbi/revox/models/user_retrieve_params.rbi +27 -0
- data/rbi/revox/models/user_retrieve_response.rbi +140 -0
- data/rbi/revox/models/voice_clone_params.rbi +141 -0
- data/rbi/revox/models/voice_clone_response.rbi +53 -0
- data/rbi/revox/models/voice_delete_params.rbi +33 -0
- data/rbi/revox/models/voice_delete_response.rbi +23 -0
- data/rbi/revox/models.rbi +37 -1
- data/rbi/revox/resources/assistants.rbi +12 -0
- data/rbi/revox/resources/auth_status.rbi +21 -0
- data/rbi/revox/resources/call.rbi +107 -0
- data/rbi/revox/resources/campaigns.rbi +94 -0
- data/rbi/revox/resources/phone_numbers.rbi +43 -0
- data/rbi/revox/resources/users.rbi +8 -2
- data/rbi/revox/resources/voices.rbi +39 -0
- data/sig/revox/client.rbs +4 -0
- data/sig/revox/models/assistant_clone_params.rbs +20 -0
- data/sig/revox/models/assistant_clone_response.rbs +1318 -0
- data/sig/revox/models/auth_status_retrieve_params.rbs +15 -0
- data/sig/revox/models/auth_status_retrieve_response.rbs +13 -0
- data/sig/revox/models/call_cancel_params.rbs +20 -0
- data/sig/revox/models/call_cancel_response.rbs +13 -0
- data/sig/revox/models/call_create_response.rbs +5 -0
- data/sig/revox/models/call_export_params.rbs +234 -0
- data/sig/revox/models/call_export_response.rbs +15 -0
- data/sig/revox/models/call_pause_params.rbs +20 -0
- data/sig/revox/models/call_pause_response.rbs +13 -0
- data/sig/revox/models/call_phone_history_params.rbs +15 -0
- data/sig/revox/models/call_phone_history_response.rbs +102 -0
- data/sig/revox/models/call_resume_params.rbs +20 -0
- data/sig/revox/models/call_resume_response.rbs +13 -0
- data/sig/revox/models/call_retrieve_response.rbs +5 -0
- data/sig/revox/models/call_search_params.rbs +198 -0
- data/sig/revox/models/call_search_response.rbs +2654 -0
- data/sig/revox/models/campaign_get_rows_response.rbs +5 -0
- data/sig/revox/models/campaign_launch_params.rbs +20 -0
- data/sig/revox/models/campaign_launch_response.rbs +1694 -0
- data/sig/revox/models/campaign_pause_params.rbs +20 -0
- data/sig/revox/models/campaign_pause_response.rbs +13 -0
- data/sig/revox/models/campaign_resume_params.rbs +20 -0
- data/sig/revox/models/campaign_resume_response.rbs +13 -0
- data/sig/revox/models/campaign_statistics_params.rbs +20 -0
- data/sig/revox/models/campaign_statistics_response.rbs +458 -0
- data/sig/revox/models/campaign_update_params.rbs +203 -0
- data/sig/revox/models/campaign_update_response.rbs +1694 -0
- data/sig/revox/models/phone_number_delete_params.rbs +20 -0
- data/sig/revox/models/phone_number_delete_response.rbs +13 -0
- data/sig/revox/models/phone_number_list_params.rbs +15 -0
- data/sig/revox/models/phone_number_list_response.rbs +1462 -0
- data/sig/revox/models/phone_number_update_params.rbs +32 -0
- data/sig/revox/models/phone_number_update_response.rbs +1460 -0
- data/sig/revox/models/user_retrieve_params.rbs +14 -0
- data/sig/revox/models/user_retrieve_response.rbs +71 -0
- data/sig/revox/models/voice_clone_params.rbs +79 -0
- data/sig/revox/models/voice_clone_response.rbs +40 -0
- data/sig/revox/models/voice_delete_params.rbs +20 -0
- data/sig/revox/models/voice_delete_response.rbs +13 -0
- data/sig/revox/models.rbs +37 -1
- data/sig/revox/resources/assistants.rbs +5 -0
- data/sig/revox/resources/auth_status.rbs +11 -0
- data/sig/revox/resources/call.rbs +45 -0
- data/sig/revox/resources/campaigns.rbs +33 -0
- data/sig/revox/resources/phone_numbers.rbs +23 -0
- data/sig/revox/resources/users.rbs +3 -1
- data/sig/revox/resources/voices.rbs +13 -0
- metadata +121 -16
- data/lib/revox/models/users/me_retrieve_params.rb +0 -16
- data/lib/revox/models/users/me_retrieve_response.rb +0 -101
- data/lib/revox/models/users/me_update_params.rb +0 -22
- data/lib/revox/models/users/me_update_response.rb +0 -101
- data/lib/revox/resources/users/me.rb +0 -55
- data/rbi/revox/models/users/me_retrieve_params.rbi +0 -29
- data/rbi/revox/models/users/me_retrieve_response.rbi +0 -149
- data/rbi/revox/models/users/me_update_params.rbi +0 -43
- data/rbi/revox/models/users/me_update_response.rbi +0 -149
- data/rbi/revox/resources/users/me.rbi +0 -33
- data/sig/revox/models/users/me_retrieve_params.rbs +0 -16
- data/sig/revox/models/users/me_retrieve_response.rbs +0 -75
- data/sig/revox/models/users/me_update_params.rbs +0 -28
- data/sig/revox/models/users/me_update_response.rbs +0 -75
- data/sig/revox/resources/users/me.rbs +0 -18
|
@@ -0,0 +1,3341 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Revox
|
|
4
|
+
module Models
|
|
5
|
+
class AssistantCloneResponse < Revox::Internal::Type::BaseModel
|
|
6
|
+
OrHash =
|
|
7
|
+
T.type_alias do
|
|
8
|
+
T.any(Revox::Models::AssistantCloneResponse, Revox::Internal::AnyHash)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
sig { returns(Revox::Models::AssistantCloneResponse::Assistant) }
|
|
12
|
+
attr_reader :assistant
|
|
13
|
+
|
|
14
|
+
sig do
|
|
15
|
+
params(
|
|
16
|
+
assistant: Revox::Models::AssistantCloneResponse::Assistant::OrHash
|
|
17
|
+
).void
|
|
18
|
+
end
|
|
19
|
+
attr_writer :assistant
|
|
20
|
+
|
|
21
|
+
sig do
|
|
22
|
+
params(
|
|
23
|
+
assistant: Revox::Models::AssistantCloneResponse::Assistant::OrHash
|
|
24
|
+
).returns(T.attached_class)
|
|
25
|
+
end
|
|
26
|
+
def self.new(assistant:)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
sig do
|
|
30
|
+
override.returns(
|
|
31
|
+
{ assistant: Revox::Models::AssistantCloneResponse::Assistant }
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
def to_hash
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class Assistant < Revox::Internal::Type::BaseModel
|
|
38
|
+
OrHash =
|
|
39
|
+
T.type_alias do
|
|
40
|
+
T.any(
|
|
41
|
+
Revox::Models::AssistantCloneResponse::Assistant,
|
|
42
|
+
Revox::Internal::AnyHash
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
sig { returns(String) }
|
|
47
|
+
attr_accessor :id
|
|
48
|
+
|
|
49
|
+
# Which call outcomes trigger the after-call SMS. When empty or null, no
|
|
50
|
+
# after-call SMS is sent. Use "none" when outcome is null.
|
|
51
|
+
sig do
|
|
52
|
+
returns(
|
|
53
|
+
T.nilable(
|
|
54
|
+
T::Array[
|
|
55
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
56
|
+
]
|
|
57
|
+
)
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
attr_accessor :after_call_sms_outcomes
|
|
61
|
+
|
|
62
|
+
# Prompt / instructions for the after-call SMS. Supports {{variable}}
|
|
63
|
+
# placeholders. When null, no after-call SMS is sent.
|
|
64
|
+
sig { returns(T.nilable(String)) }
|
|
65
|
+
attr_accessor :after_call_sms_prompt
|
|
66
|
+
|
|
67
|
+
# Ambient background sound to play during the call. null disables it.
|
|
68
|
+
sig do
|
|
69
|
+
returns(
|
|
70
|
+
T.nilable(
|
|
71
|
+
Revox::Models::AssistantCloneResponse::Assistant::BackgroundSound::TaggedSymbol
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
end
|
|
75
|
+
attr_accessor :background_sound
|
|
76
|
+
|
|
77
|
+
# Volume of the ambient background sound (0 = silent, 1 = max).
|
|
78
|
+
sig { returns(Float) }
|
|
79
|
+
attr_accessor :background_sound_volume
|
|
80
|
+
|
|
81
|
+
sig do
|
|
82
|
+
returns(
|
|
83
|
+
T.nilable(
|
|
84
|
+
Revox::Models::AssistantCloneResponse::Assistant::Calendly
|
|
85
|
+
)
|
|
86
|
+
)
|
|
87
|
+
end
|
|
88
|
+
attr_reader :calendly
|
|
89
|
+
|
|
90
|
+
sig do
|
|
91
|
+
params(
|
|
92
|
+
calendly:
|
|
93
|
+
T.nilable(
|
|
94
|
+
Revox::Models::AssistantCloneResponse::Assistant::Calendly::OrHash
|
|
95
|
+
)
|
|
96
|
+
).void
|
|
97
|
+
end
|
|
98
|
+
attr_writer :calendly
|
|
99
|
+
|
|
100
|
+
# Configuration for call retry behavior including time windows, delays, and max
|
|
101
|
+
# iterations. If not provided, defaults will be used.
|
|
102
|
+
sig do
|
|
103
|
+
returns(
|
|
104
|
+
T.nilable(
|
|
105
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig
|
|
106
|
+
)
|
|
107
|
+
)
|
|
108
|
+
end
|
|
109
|
+
attr_reader :call_retry_config
|
|
110
|
+
|
|
111
|
+
sig do
|
|
112
|
+
params(
|
|
113
|
+
call_retry_config:
|
|
114
|
+
T.nilable(
|
|
115
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::OrHash
|
|
116
|
+
)
|
|
117
|
+
).void
|
|
118
|
+
end
|
|
119
|
+
attr_writer :call_retry_config
|
|
120
|
+
|
|
121
|
+
# Optional Cartesia pronunciation dictionary ID linked to this assistant.
|
|
122
|
+
sig { returns(T.nilable(String)) }
|
|
123
|
+
attr_accessor :cartesia_dictionary_pronunciation_id
|
|
124
|
+
|
|
125
|
+
sig { returns(T.anything) }
|
|
126
|
+
attr_accessor :created_at
|
|
127
|
+
|
|
128
|
+
sig do
|
|
129
|
+
returns(
|
|
130
|
+
T.nilable(
|
|
131
|
+
T::Array[
|
|
132
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool
|
|
133
|
+
]
|
|
134
|
+
)
|
|
135
|
+
)
|
|
136
|
+
end
|
|
137
|
+
attr_accessor :custom_tools
|
|
138
|
+
|
|
139
|
+
# Email address(es) to receive notifications when a call ends with a matching
|
|
140
|
+
# outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
|
|
141
|
+
# bob@y.com").
|
|
142
|
+
sig { returns(T.nilable(String)) }
|
|
143
|
+
attr_accessor :email_notification_address
|
|
144
|
+
|
|
145
|
+
# The language used for the notification email content. One of "en" or "fr".
|
|
146
|
+
sig do
|
|
147
|
+
returns(
|
|
148
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
|
|
149
|
+
)
|
|
150
|
+
end
|
|
151
|
+
attr_accessor :email_notification_language
|
|
152
|
+
|
|
153
|
+
# Which call outcomes trigger an email notification. E.g. ["interested",
|
|
154
|
+
# "completed", "none"]. Use "none" when outcome is null.
|
|
155
|
+
sig do
|
|
156
|
+
returns(
|
|
157
|
+
T.nilable(
|
|
158
|
+
T::Array[
|
|
159
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
160
|
+
]
|
|
161
|
+
)
|
|
162
|
+
)
|
|
163
|
+
end
|
|
164
|
+
attr_accessor :email_notification_outcomes
|
|
165
|
+
|
|
166
|
+
sig { returns(T.nilable(String)) }
|
|
167
|
+
attr_accessor :end_of_call_sentence
|
|
168
|
+
|
|
169
|
+
sig { returns(T.nilable(String)) }
|
|
170
|
+
attr_accessor :first_sentence
|
|
171
|
+
|
|
172
|
+
# Delay in milliseconds before speaking the first sentence. Default: 400.
|
|
173
|
+
sig { returns(Integer) }
|
|
174
|
+
attr_accessor :first_sentence_delay_ms
|
|
175
|
+
|
|
176
|
+
sig do
|
|
177
|
+
returns(
|
|
178
|
+
Revox::Models::AssistantCloneResponse::Assistant::FirstSentenceMode::TaggedSymbol
|
|
179
|
+
)
|
|
180
|
+
end
|
|
181
|
+
attr_accessor :first_sentence_mode
|
|
182
|
+
|
|
183
|
+
# Override the default outbound phone number for calls placed with this assistant.
|
|
184
|
+
# When null, the organization's default phone number is used.
|
|
185
|
+
sig { returns(T.nilable(String)) }
|
|
186
|
+
attr_accessor :from_phone_number
|
|
187
|
+
|
|
188
|
+
# Warm or cold transfer when transfer_phone_number is set; null when transfer is
|
|
189
|
+
# not configured.
|
|
190
|
+
sig do
|
|
191
|
+
returns(
|
|
192
|
+
T.nilable(
|
|
193
|
+
Revox::Models::AssistantCloneResponse::Assistant::HumanTransferMode::TaggedSymbol
|
|
194
|
+
)
|
|
195
|
+
)
|
|
196
|
+
end
|
|
197
|
+
attr_accessor :human_transfer_mode
|
|
198
|
+
|
|
199
|
+
# Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
|
|
200
|
+
# skip turns to navigate phone menus.
|
|
201
|
+
sig { returns(T::Boolean) }
|
|
202
|
+
attr_accessor :ivr_navigation_enabled
|
|
203
|
+
|
|
204
|
+
sig do
|
|
205
|
+
returns(
|
|
206
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::Variants
|
|
207
|
+
)
|
|
208
|
+
end
|
|
209
|
+
attr_accessor :llm_model
|
|
210
|
+
|
|
211
|
+
# Public URL of the brand logo shown on the assistant's demo page. Null when
|
|
212
|
+
# unset.
|
|
213
|
+
sig { returns(T.nilable(String)) }
|
|
214
|
+
attr_accessor :logo_url
|
|
215
|
+
|
|
216
|
+
# The maximum duration of the call in seconds. This is the maximum time the call
|
|
217
|
+
# will be allowed to run.
|
|
218
|
+
sig { returns(Float) }
|
|
219
|
+
attr_accessor :max_call_duration_secs
|
|
220
|
+
|
|
221
|
+
# Optional message the agent will say, without being interruptible, when the call
|
|
222
|
+
# reaches its max duration. Kept short so it fits inside the farewell buffer. If
|
|
223
|
+
# null, the call ends silently.
|
|
224
|
+
sig { returns(T.nilable(String)) }
|
|
225
|
+
attr_accessor :max_duration_end_message
|
|
226
|
+
|
|
227
|
+
sig { returns(String) }
|
|
228
|
+
attr_accessor :name
|
|
229
|
+
|
|
230
|
+
sig { returns(String) }
|
|
231
|
+
attr_accessor :organization_id
|
|
232
|
+
|
|
233
|
+
sig do
|
|
234
|
+
returns(
|
|
235
|
+
T.nilable(
|
|
236
|
+
Revox::Models::AssistantCloneResponse::Assistant::Position
|
|
237
|
+
)
|
|
238
|
+
)
|
|
239
|
+
end
|
|
240
|
+
attr_reader :position
|
|
241
|
+
|
|
242
|
+
sig do
|
|
243
|
+
params(
|
|
244
|
+
position:
|
|
245
|
+
T.nilable(
|
|
246
|
+
Revox::Models::AssistantCloneResponse::Assistant::Position::OrHash
|
|
247
|
+
)
|
|
248
|
+
).void
|
|
249
|
+
end
|
|
250
|
+
attr_writer :position
|
|
251
|
+
|
|
252
|
+
sig { returns(String) }
|
|
253
|
+
attr_accessor :prompt
|
|
254
|
+
|
|
255
|
+
sig do
|
|
256
|
+
returns(
|
|
257
|
+
T.nilable(
|
|
258
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow
|
|
259
|
+
)
|
|
260
|
+
)
|
|
261
|
+
end
|
|
262
|
+
attr_reader :prompt_flow
|
|
263
|
+
|
|
264
|
+
sig do
|
|
265
|
+
params(
|
|
266
|
+
prompt_flow:
|
|
267
|
+
T.nilable(
|
|
268
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::OrHash
|
|
269
|
+
)
|
|
270
|
+
).void
|
|
271
|
+
end
|
|
272
|
+
attr_writer :prompt_flow
|
|
273
|
+
|
|
274
|
+
sig do
|
|
275
|
+
returns(
|
|
276
|
+
T.nilable(Revox::Models::AssistantCloneResponse::Assistant::Slack)
|
|
277
|
+
)
|
|
278
|
+
end
|
|
279
|
+
attr_reader :slack
|
|
280
|
+
|
|
281
|
+
sig do
|
|
282
|
+
params(
|
|
283
|
+
slack:
|
|
284
|
+
T.nilable(
|
|
285
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::OrHash
|
|
286
|
+
)
|
|
287
|
+
).void
|
|
288
|
+
end
|
|
289
|
+
attr_writer :slack
|
|
290
|
+
|
|
291
|
+
# Enable SMS tool during calls. When enabled, the agent can send SMS messages to
|
|
292
|
+
# the user on the call.
|
|
293
|
+
sig { returns(T::Boolean) }
|
|
294
|
+
attr_accessor :sms_enabled
|
|
295
|
+
|
|
296
|
+
# Hardcoded SMS template to send during calls. When set, this exact text is sent
|
|
297
|
+
# instead of letting the agent generate the message. Supports {{variable}}
|
|
298
|
+
# placeholders.
|
|
299
|
+
sig { returns(T.nilable(String)) }
|
|
300
|
+
attr_accessor :sms_template
|
|
301
|
+
|
|
302
|
+
# The structured output config to use for the call. This is used to extract the
|
|
303
|
+
# data from the call (like email, name, company name, etc.).
|
|
304
|
+
sig do
|
|
305
|
+
returns(
|
|
306
|
+
T.nilable(
|
|
307
|
+
T::Array[
|
|
308
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig
|
|
309
|
+
]
|
|
310
|
+
)
|
|
311
|
+
)
|
|
312
|
+
end
|
|
313
|
+
attr_accessor :structured_output_config
|
|
314
|
+
|
|
315
|
+
# Custom prompt for structured data extraction. If not provided, a default prompt
|
|
316
|
+
# is used. Available variables: {{transcript}}, {{call_direction}},
|
|
317
|
+
# {{user_phone_number}}, {{agent_phone_number}}.
|
|
318
|
+
sig { returns(T.nilable(String)) }
|
|
319
|
+
attr_accessor :structured_output_prompt
|
|
320
|
+
|
|
321
|
+
# Assistant-level speech-to-text context: structured `general` key/value pairs
|
|
322
|
+
# plus a list of domain `terms`. Prompt-derived context is merged in without
|
|
323
|
+
# replacing existing entries.
|
|
324
|
+
sig do
|
|
325
|
+
returns(
|
|
326
|
+
T.nilable(
|
|
327
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttContext
|
|
328
|
+
)
|
|
329
|
+
)
|
|
330
|
+
end
|
|
331
|
+
attr_reader :stt_context
|
|
332
|
+
|
|
333
|
+
sig do
|
|
334
|
+
params(
|
|
335
|
+
stt_context:
|
|
336
|
+
T.nilable(
|
|
337
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttContext::OrHash
|
|
338
|
+
)
|
|
339
|
+
).void
|
|
340
|
+
end
|
|
341
|
+
attr_writer :stt_context
|
|
342
|
+
|
|
343
|
+
# Transcriber (speech-to-text) model used for the assistant.
|
|
344
|
+
sig do
|
|
345
|
+
returns(
|
|
346
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttModel::TaggedSymbol
|
|
347
|
+
)
|
|
348
|
+
end
|
|
349
|
+
attr_accessor :stt_model
|
|
350
|
+
|
|
351
|
+
# Audio clip to play while the agent is processing a response. One of the built-in
|
|
352
|
+
# LiveKit audio clips; null disables it.
|
|
353
|
+
sig do
|
|
354
|
+
returns(
|
|
355
|
+
T.nilable(
|
|
356
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
357
|
+
)
|
|
358
|
+
)
|
|
359
|
+
end
|
|
360
|
+
attr_accessor :thinking_sound
|
|
361
|
+
|
|
362
|
+
# Probability [0..1] that the thinking sound plays on any given turn; otherwise
|
|
363
|
+
# the agent is silent while thinking.
|
|
364
|
+
sig { returns(Float) }
|
|
365
|
+
attr_accessor :thinking_sound_probability
|
|
366
|
+
|
|
367
|
+
# Volume of the thinking sound (0 = silent, 1 = max).
|
|
368
|
+
sig { returns(Float) }
|
|
369
|
+
attr_accessor :thinking_sound_volume
|
|
370
|
+
|
|
371
|
+
# Phone number to transfer calls to when users request to speak to a human agent.
|
|
372
|
+
sig { returns(T.nilable(String)) }
|
|
373
|
+
attr_accessor :transfer_phone_number
|
|
374
|
+
|
|
375
|
+
sig do
|
|
376
|
+
returns(
|
|
377
|
+
Revox::Models::AssistantCloneResponse::Assistant::Type::TaggedSymbol
|
|
378
|
+
)
|
|
379
|
+
end
|
|
380
|
+
attr_accessor :type
|
|
381
|
+
|
|
382
|
+
sig { returns(T.anything) }
|
|
383
|
+
attr_accessor :updated_at
|
|
384
|
+
|
|
385
|
+
sig do
|
|
386
|
+
returns(
|
|
387
|
+
T.nilable(Revox::Models::AssistantCloneResponse::Assistant::Voice)
|
|
388
|
+
)
|
|
389
|
+
end
|
|
390
|
+
attr_reader :voice
|
|
391
|
+
|
|
392
|
+
sig do
|
|
393
|
+
params(
|
|
394
|
+
voice:
|
|
395
|
+
T.nilable(
|
|
396
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::OrHash
|
|
397
|
+
)
|
|
398
|
+
).void
|
|
399
|
+
end
|
|
400
|
+
attr_writer :voice
|
|
401
|
+
|
|
402
|
+
# If set, when voicemail is detected the agent will speak this message then hang
|
|
403
|
+
# up; if null, hang up immediately.
|
|
404
|
+
sig { returns(T.nilable(String)) }
|
|
405
|
+
attr_accessor :voicemail_message
|
|
406
|
+
|
|
407
|
+
# Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
|
|
408
|
+
# When null, no SMS is sent on voicemail.
|
|
409
|
+
sig { returns(T.nilable(String)) }
|
|
410
|
+
attr_accessor :voicemail_sms_prompt
|
|
411
|
+
|
|
412
|
+
# Warm transfer only: instructions for the supervisor handoff summary; null when
|
|
413
|
+
# not configured or cold transfer.
|
|
414
|
+
sig { returns(T.nilable(String)) }
|
|
415
|
+
attr_accessor :warm_transfer_summary_instructions
|
|
416
|
+
|
|
417
|
+
# The webhook URL to call when the call is completed.
|
|
418
|
+
sig { returns(T.nilable(String)) }
|
|
419
|
+
attr_accessor :webhook_url
|
|
420
|
+
|
|
421
|
+
sig do
|
|
422
|
+
returns(
|
|
423
|
+
T.nilable(Revox::Models::AssistantCloneResponse::Assistant::Zoho)
|
|
424
|
+
)
|
|
425
|
+
end
|
|
426
|
+
attr_reader :zoho
|
|
427
|
+
|
|
428
|
+
sig do
|
|
429
|
+
params(
|
|
430
|
+
zoho:
|
|
431
|
+
T.nilable(
|
|
432
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::OrHash
|
|
433
|
+
)
|
|
434
|
+
).void
|
|
435
|
+
end
|
|
436
|
+
attr_writer :zoho
|
|
437
|
+
|
|
438
|
+
# The user who created the assistant.
|
|
439
|
+
sig do
|
|
440
|
+
returns(
|
|
441
|
+
T.nilable(
|
|
442
|
+
Revox::Models::AssistantCloneResponse::Assistant::CreatedBy
|
|
443
|
+
)
|
|
444
|
+
)
|
|
445
|
+
end
|
|
446
|
+
attr_reader :created_by
|
|
447
|
+
|
|
448
|
+
sig do
|
|
449
|
+
params(
|
|
450
|
+
created_by:
|
|
451
|
+
T.nilable(
|
|
452
|
+
Revox::Models::AssistantCloneResponse::Assistant::CreatedBy::OrHash
|
|
453
|
+
)
|
|
454
|
+
).void
|
|
455
|
+
end
|
|
456
|
+
attr_writer :created_by
|
|
457
|
+
|
|
458
|
+
sig do
|
|
459
|
+
returns(
|
|
460
|
+
T.nilable(
|
|
461
|
+
T::Array[
|
|
462
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem
|
|
463
|
+
]
|
|
464
|
+
)
|
|
465
|
+
)
|
|
466
|
+
end
|
|
467
|
+
attr_reader :faq_items
|
|
468
|
+
|
|
469
|
+
sig do
|
|
470
|
+
params(
|
|
471
|
+
faq_items:
|
|
472
|
+
T::Array[
|
|
473
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::OrHash
|
|
474
|
+
]
|
|
475
|
+
).void
|
|
476
|
+
end
|
|
477
|
+
attr_writer :faq_items
|
|
478
|
+
|
|
479
|
+
sig { returns(T.nilable(T::Boolean)) }
|
|
480
|
+
attr_reader :is_realestate_assistant
|
|
481
|
+
|
|
482
|
+
sig { params(is_realestate_assistant: T::Boolean).void }
|
|
483
|
+
attr_writer :is_realestate_assistant
|
|
484
|
+
|
|
485
|
+
sig { returns(T.nilable(Float)) }
|
|
486
|
+
attr_reader :pending_faq_count
|
|
487
|
+
|
|
488
|
+
sig { params(pending_faq_count: Float).void }
|
|
489
|
+
attr_writer :pending_faq_count
|
|
490
|
+
|
|
491
|
+
sig do
|
|
492
|
+
params(
|
|
493
|
+
id: String,
|
|
494
|
+
after_call_sms_outcomes:
|
|
495
|
+
T.nilable(
|
|
496
|
+
T::Array[
|
|
497
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::OrSymbol
|
|
498
|
+
]
|
|
499
|
+
),
|
|
500
|
+
after_call_sms_prompt: T.nilable(String),
|
|
501
|
+
background_sound:
|
|
502
|
+
T.nilable(
|
|
503
|
+
Revox::Models::AssistantCloneResponse::Assistant::BackgroundSound::OrSymbol
|
|
504
|
+
),
|
|
505
|
+
background_sound_volume: Float,
|
|
506
|
+
calendly:
|
|
507
|
+
T.nilable(
|
|
508
|
+
Revox::Models::AssistantCloneResponse::Assistant::Calendly::OrHash
|
|
509
|
+
),
|
|
510
|
+
call_retry_config:
|
|
511
|
+
T.nilable(
|
|
512
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::OrHash
|
|
513
|
+
),
|
|
514
|
+
cartesia_dictionary_pronunciation_id: T.nilable(String),
|
|
515
|
+
created_at: T.anything,
|
|
516
|
+
custom_tools:
|
|
517
|
+
T.nilable(
|
|
518
|
+
T::Array[
|
|
519
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::OrHash
|
|
520
|
+
]
|
|
521
|
+
),
|
|
522
|
+
email_notification_address: T.nilable(String),
|
|
523
|
+
email_notification_language:
|
|
524
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationLanguage::OrSymbol,
|
|
525
|
+
email_notification_outcomes:
|
|
526
|
+
T.nilable(
|
|
527
|
+
T::Array[
|
|
528
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::OrSymbol
|
|
529
|
+
]
|
|
530
|
+
),
|
|
531
|
+
end_of_call_sentence: T.nilable(String),
|
|
532
|
+
first_sentence: T.nilable(String),
|
|
533
|
+
first_sentence_delay_ms: Integer,
|
|
534
|
+
first_sentence_mode:
|
|
535
|
+
Revox::Models::AssistantCloneResponse::Assistant::FirstSentenceMode::OrSymbol,
|
|
536
|
+
from_phone_number: T.nilable(String),
|
|
537
|
+
human_transfer_mode:
|
|
538
|
+
T.nilable(
|
|
539
|
+
Revox::Models::AssistantCloneResponse::Assistant::HumanTransferMode::OrSymbol
|
|
540
|
+
),
|
|
541
|
+
ivr_navigation_enabled: T::Boolean,
|
|
542
|
+
llm_model:
|
|
543
|
+
T.any(
|
|
544
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0::OrHash,
|
|
545
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember1::OrHash,
|
|
546
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember2::OrHash,
|
|
547
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3::OrHash
|
|
548
|
+
),
|
|
549
|
+
logo_url: T.nilable(String),
|
|
550
|
+
max_call_duration_secs: Float,
|
|
551
|
+
max_duration_end_message: T.nilable(String),
|
|
552
|
+
name: String,
|
|
553
|
+
organization_id: String,
|
|
554
|
+
position:
|
|
555
|
+
T.nilable(
|
|
556
|
+
Revox::Models::AssistantCloneResponse::Assistant::Position::OrHash
|
|
557
|
+
),
|
|
558
|
+
prompt: String,
|
|
559
|
+
prompt_flow:
|
|
560
|
+
T.nilable(
|
|
561
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::OrHash
|
|
562
|
+
),
|
|
563
|
+
slack:
|
|
564
|
+
T.nilable(
|
|
565
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::OrHash
|
|
566
|
+
),
|
|
567
|
+
sms_enabled: T::Boolean,
|
|
568
|
+
sms_template: T.nilable(String),
|
|
569
|
+
structured_output_config:
|
|
570
|
+
T.nilable(
|
|
571
|
+
T::Array[
|
|
572
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::OrHash
|
|
573
|
+
]
|
|
574
|
+
),
|
|
575
|
+
structured_output_prompt: T.nilable(String),
|
|
576
|
+
stt_context:
|
|
577
|
+
T.nilable(
|
|
578
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttContext::OrHash
|
|
579
|
+
),
|
|
580
|
+
stt_model:
|
|
581
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttModel::OrSymbol,
|
|
582
|
+
thinking_sound:
|
|
583
|
+
T.nilable(
|
|
584
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::OrSymbol
|
|
585
|
+
),
|
|
586
|
+
thinking_sound_probability: Float,
|
|
587
|
+
thinking_sound_volume: Float,
|
|
588
|
+
transfer_phone_number: T.nilable(String),
|
|
589
|
+
type:
|
|
590
|
+
Revox::Models::AssistantCloneResponse::Assistant::Type::OrSymbol,
|
|
591
|
+
updated_at: T.anything,
|
|
592
|
+
voice:
|
|
593
|
+
T.nilable(
|
|
594
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::OrHash
|
|
595
|
+
),
|
|
596
|
+
voicemail_message: T.nilable(String),
|
|
597
|
+
voicemail_sms_prompt: T.nilable(String),
|
|
598
|
+
warm_transfer_summary_instructions: T.nilable(String),
|
|
599
|
+
webhook_url: T.nilable(String),
|
|
600
|
+
zoho:
|
|
601
|
+
T.nilable(
|
|
602
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::OrHash
|
|
603
|
+
),
|
|
604
|
+
created_by:
|
|
605
|
+
T.nilable(
|
|
606
|
+
Revox::Models::AssistantCloneResponse::Assistant::CreatedBy::OrHash
|
|
607
|
+
),
|
|
608
|
+
faq_items:
|
|
609
|
+
T::Array[
|
|
610
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::OrHash
|
|
611
|
+
],
|
|
612
|
+
is_realestate_assistant: T::Boolean,
|
|
613
|
+
pending_faq_count: Float
|
|
614
|
+
).returns(T.attached_class)
|
|
615
|
+
end
|
|
616
|
+
def self.new(
|
|
617
|
+
id:,
|
|
618
|
+
# Which call outcomes trigger the after-call SMS. When empty or null, no
|
|
619
|
+
# after-call SMS is sent. Use "none" when outcome is null.
|
|
620
|
+
after_call_sms_outcomes:,
|
|
621
|
+
# Prompt / instructions for the after-call SMS. Supports {{variable}}
|
|
622
|
+
# placeholders. When null, no after-call SMS is sent.
|
|
623
|
+
after_call_sms_prompt:,
|
|
624
|
+
# Ambient background sound to play during the call. null disables it.
|
|
625
|
+
background_sound:,
|
|
626
|
+
# Volume of the ambient background sound (0 = silent, 1 = max).
|
|
627
|
+
background_sound_volume:,
|
|
628
|
+
calendly:,
|
|
629
|
+
# Configuration for call retry behavior including time windows, delays, and max
|
|
630
|
+
# iterations. If not provided, defaults will be used.
|
|
631
|
+
call_retry_config:,
|
|
632
|
+
# Optional Cartesia pronunciation dictionary ID linked to this assistant.
|
|
633
|
+
cartesia_dictionary_pronunciation_id:,
|
|
634
|
+
created_at:,
|
|
635
|
+
custom_tools:,
|
|
636
|
+
# Email address(es) to receive notifications when a call ends with a matching
|
|
637
|
+
# outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
|
|
638
|
+
# bob@y.com").
|
|
639
|
+
email_notification_address:,
|
|
640
|
+
# The language used for the notification email content. One of "en" or "fr".
|
|
641
|
+
email_notification_language:,
|
|
642
|
+
# Which call outcomes trigger an email notification. E.g. ["interested",
|
|
643
|
+
# "completed", "none"]. Use "none" when outcome is null.
|
|
644
|
+
email_notification_outcomes:,
|
|
645
|
+
end_of_call_sentence:,
|
|
646
|
+
first_sentence:,
|
|
647
|
+
# Delay in milliseconds before speaking the first sentence. Default: 400.
|
|
648
|
+
first_sentence_delay_ms:,
|
|
649
|
+
first_sentence_mode:,
|
|
650
|
+
# Override the default outbound phone number for calls placed with this assistant.
|
|
651
|
+
# When null, the organization's default phone number is used.
|
|
652
|
+
from_phone_number:,
|
|
653
|
+
# Warm or cold transfer when transfer_phone_number is set; null when transfer is
|
|
654
|
+
# not configured.
|
|
655
|
+
human_transfer_mode:,
|
|
656
|
+
# Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
|
|
657
|
+
# skip turns to navigate phone menus.
|
|
658
|
+
ivr_navigation_enabled:,
|
|
659
|
+
llm_model:,
|
|
660
|
+
# Public URL of the brand logo shown on the assistant's demo page. Null when
|
|
661
|
+
# unset.
|
|
662
|
+
logo_url:,
|
|
663
|
+
# The maximum duration of the call in seconds. This is the maximum time the call
|
|
664
|
+
# will be allowed to run.
|
|
665
|
+
max_call_duration_secs:,
|
|
666
|
+
# Optional message the agent will say, without being interruptible, when the call
|
|
667
|
+
# reaches its max duration. Kept short so it fits inside the farewell buffer. If
|
|
668
|
+
# null, the call ends silently.
|
|
669
|
+
max_duration_end_message:,
|
|
670
|
+
name:,
|
|
671
|
+
organization_id:,
|
|
672
|
+
position:,
|
|
673
|
+
prompt:,
|
|
674
|
+
prompt_flow:,
|
|
675
|
+
slack:,
|
|
676
|
+
# Enable SMS tool during calls. When enabled, the agent can send SMS messages to
|
|
677
|
+
# the user on the call.
|
|
678
|
+
sms_enabled:,
|
|
679
|
+
# Hardcoded SMS template to send during calls. When set, this exact text is sent
|
|
680
|
+
# instead of letting the agent generate the message. Supports {{variable}}
|
|
681
|
+
# placeholders.
|
|
682
|
+
sms_template:,
|
|
683
|
+
# The structured output config to use for the call. This is used to extract the
|
|
684
|
+
# data from the call (like email, name, company name, etc.).
|
|
685
|
+
structured_output_config:,
|
|
686
|
+
# Custom prompt for structured data extraction. If not provided, a default prompt
|
|
687
|
+
# is used. Available variables: {{transcript}}, {{call_direction}},
|
|
688
|
+
# {{user_phone_number}}, {{agent_phone_number}}.
|
|
689
|
+
structured_output_prompt:,
|
|
690
|
+
# Assistant-level speech-to-text context: structured `general` key/value pairs
|
|
691
|
+
# plus a list of domain `terms`. Prompt-derived context is merged in without
|
|
692
|
+
# replacing existing entries.
|
|
693
|
+
stt_context:,
|
|
694
|
+
# Transcriber (speech-to-text) model used for the assistant.
|
|
695
|
+
stt_model:,
|
|
696
|
+
# Audio clip to play while the agent is processing a response. One of the built-in
|
|
697
|
+
# LiveKit audio clips; null disables it.
|
|
698
|
+
thinking_sound:,
|
|
699
|
+
# Probability [0..1] that the thinking sound plays on any given turn; otherwise
|
|
700
|
+
# the agent is silent while thinking.
|
|
701
|
+
thinking_sound_probability:,
|
|
702
|
+
# Volume of the thinking sound (0 = silent, 1 = max).
|
|
703
|
+
thinking_sound_volume:,
|
|
704
|
+
# Phone number to transfer calls to when users request to speak to a human agent.
|
|
705
|
+
transfer_phone_number:,
|
|
706
|
+
type:,
|
|
707
|
+
updated_at:,
|
|
708
|
+
voice:,
|
|
709
|
+
# If set, when voicemail is detected the agent will speak this message then hang
|
|
710
|
+
# up; if null, hang up immediately.
|
|
711
|
+
voicemail_message:,
|
|
712
|
+
# Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
|
|
713
|
+
# When null, no SMS is sent on voicemail.
|
|
714
|
+
voicemail_sms_prompt:,
|
|
715
|
+
# Warm transfer only: instructions for the supervisor handoff summary; null when
|
|
716
|
+
# not configured or cold transfer.
|
|
717
|
+
warm_transfer_summary_instructions:,
|
|
718
|
+
# The webhook URL to call when the call is completed.
|
|
719
|
+
webhook_url:,
|
|
720
|
+
zoho:,
|
|
721
|
+
# The user who created the assistant.
|
|
722
|
+
created_by: nil,
|
|
723
|
+
faq_items: nil,
|
|
724
|
+
is_realestate_assistant: nil,
|
|
725
|
+
pending_faq_count: nil
|
|
726
|
+
)
|
|
727
|
+
end
|
|
728
|
+
|
|
729
|
+
sig do
|
|
730
|
+
override.returns(
|
|
731
|
+
{
|
|
732
|
+
id: String,
|
|
733
|
+
after_call_sms_outcomes:
|
|
734
|
+
T.nilable(
|
|
735
|
+
T::Array[
|
|
736
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
737
|
+
]
|
|
738
|
+
),
|
|
739
|
+
after_call_sms_prompt: T.nilable(String),
|
|
740
|
+
background_sound:
|
|
741
|
+
T.nilable(
|
|
742
|
+
Revox::Models::AssistantCloneResponse::Assistant::BackgroundSound::TaggedSymbol
|
|
743
|
+
),
|
|
744
|
+
background_sound_volume: Float,
|
|
745
|
+
calendly:
|
|
746
|
+
T.nilable(
|
|
747
|
+
Revox::Models::AssistantCloneResponse::Assistant::Calendly
|
|
748
|
+
),
|
|
749
|
+
call_retry_config:
|
|
750
|
+
T.nilable(
|
|
751
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig
|
|
752
|
+
),
|
|
753
|
+
cartesia_dictionary_pronunciation_id: T.nilable(String),
|
|
754
|
+
created_at: T.anything,
|
|
755
|
+
custom_tools:
|
|
756
|
+
T.nilable(
|
|
757
|
+
T::Array[
|
|
758
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool
|
|
759
|
+
]
|
|
760
|
+
),
|
|
761
|
+
email_notification_address: T.nilable(String),
|
|
762
|
+
email_notification_language:
|
|
763
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationLanguage::TaggedSymbol,
|
|
764
|
+
email_notification_outcomes:
|
|
765
|
+
T.nilable(
|
|
766
|
+
T::Array[
|
|
767
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
768
|
+
]
|
|
769
|
+
),
|
|
770
|
+
end_of_call_sentence: T.nilable(String),
|
|
771
|
+
first_sentence: T.nilable(String),
|
|
772
|
+
first_sentence_delay_ms: Integer,
|
|
773
|
+
first_sentence_mode:
|
|
774
|
+
Revox::Models::AssistantCloneResponse::Assistant::FirstSentenceMode::TaggedSymbol,
|
|
775
|
+
from_phone_number: T.nilable(String),
|
|
776
|
+
human_transfer_mode:
|
|
777
|
+
T.nilable(
|
|
778
|
+
Revox::Models::AssistantCloneResponse::Assistant::HumanTransferMode::TaggedSymbol
|
|
779
|
+
),
|
|
780
|
+
ivr_navigation_enabled: T::Boolean,
|
|
781
|
+
llm_model:
|
|
782
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::Variants,
|
|
783
|
+
logo_url: T.nilable(String),
|
|
784
|
+
max_call_duration_secs: Float,
|
|
785
|
+
max_duration_end_message: T.nilable(String),
|
|
786
|
+
name: String,
|
|
787
|
+
organization_id: String,
|
|
788
|
+
position:
|
|
789
|
+
T.nilable(
|
|
790
|
+
Revox::Models::AssistantCloneResponse::Assistant::Position
|
|
791
|
+
),
|
|
792
|
+
prompt: String,
|
|
793
|
+
prompt_flow:
|
|
794
|
+
T.nilable(
|
|
795
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow
|
|
796
|
+
),
|
|
797
|
+
slack:
|
|
798
|
+
T.nilable(
|
|
799
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack
|
|
800
|
+
),
|
|
801
|
+
sms_enabled: T::Boolean,
|
|
802
|
+
sms_template: T.nilable(String),
|
|
803
|
+
structured_output_config:
|
|
804
|
+
T.nilable(
|
|
805
|
+
T::Array[
|
|
806
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig
|
|
807
|
+
]
|
|
808
|
+
),
|
|
809
|
+
structured_output_prompt: T.nilable(String),
|
|
810
|
+
stt_context:
|
|
811
|
+
T.nilable(
|
|
812
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttContext
|
|
813
|
+
),
|
|
814
|
+
stt_model:
|
|
815
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttModel::TaggedSymbol,
|
|
816
|
+
thinking_sound:
|
|
817
|
+
T.nilable(
|
|
818
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
819
|
+
),
|
|
820
|
+
thinking_sound_probability: Float,
|
|
821
|
+
thinking_sound_volume: Float,
|
|
822
|
+
transfer_phone_number: T.nilable(String),
|
|
823
|
+
type:
|
|
824
|
+
Revox::Models::AssistantCloneResponse::Assistant::Type::TaggedSymbol,
|
|
825
|
+
updated_at: T.anything,
|
|
826
|
+
voice:
|
|
827
|
+
T.nilable(
|
|
828
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice
|
|
829
|
+
),
|
|
830
|
+
voicemail_message: T.nilable(String),
|
|
831
|
+
voicemail_sms_prompt: T.nilable(String),
|
|
832
|
+
warm_transfer_summary_instructions: T.nilable(String),
|
|
833
|
+
webhook_url: T.nilable(String),
|
|
834
|
+
zoho:
|
|
835
|
+
T.nilable(
|
|
836
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho
|
|
837
|
+
),
|
|
838
|
+
created_by:
|
|
839
|
+
T.nilable(
|
|
840
|
+
Revox::Models::AssistantCloneResponse::Assistant::CreatedBy
|
|
841
|
+
),
|
|
842
|
+
faq_items:
|
|
843
|
+
T::Array[
|
|
844
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem
|
|
845
|
+
],
|
|
846
|
+
is_realestate_assistant: T::Boolean,
|
|
847
|
+
pending_faq_count: Float
|
|
848
|
+
}
|
|
849
|
+
)
|
|
850
|
+
end
|
|
851
|
+
def to_hash
|
|
852
|
+
end
|
|
853
|
+
|
|
854
|
+
module AfterCallSMSOutcome
|
|
855
|
+
extend Revox::Internal::Type::Enum
|
|
856
|
+
|
|
857
|
+
TaggedSymbol =
|
|
858
|
+
T.type_alias do
|
|
859
|
+
T.all(
|
|
860
|
+
Symbol,
|
|
861
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome
|
|
862
|
+
)
|
|
863
|
+
end
|
|
864
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
865
|
+
|
|
866
|
+
NOT_INTERESTED =
|
|
867
|
+
T.let(
|
|
868
|
+
:not_interested,
|
|
869
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
870
|
+
)
|
|
871
|
+
INTERESTED =
|
|
872
|
+
T.let(
|
|
873
|
+
:interested,
|
|
874
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
875
|
+
)
|
|
876
|
+
COMPLETED =
|
|
877
|
+
T.let(
|
|
878
|
+
:completed,
|
|
879
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
880
|
+
)
|
|
881
|
+
REQUESTED_CALLBACK_LATER =
|
|
882
|
+
T.let(
|
|
883
|
+
:requested_callback_later,
|
|
884
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
885
|
+
)
|
|
886
|
+
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
887
|
+
T.let(
|
|
888
|
+
:requested_callback_new_number,
|
|
889
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
890
|
+
)
|
|
891
|
+
DO_NOT_CONTACT =
|
|
892
|
+
T.let(
|
|
893
|
+
:do_not_contact,
|
|
894
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
895
|
+
)
|
|
896
|
+
AI_AVERSE =
|
|
897
|
+
T.let(
|
|
898
|
+
:ai_averse,
|
|
899
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
900
|
+
)
|
|
901
|
+
NONE =
|
|
902
|
+
T.let(
|
|
903
|
+
:none,
|
|
904
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
905
|
+
)
|
|
906
|
+
|
|
907
|
+
sig do
|
|
908
|
+
override.returns(
|
|
909
|
+
T::Array[
|
|
910
|
+
Revox::Models::AssistantCloneResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
|
|
911
|
+
]
|
|
912
|
+
)
|
|
913
|
+
end
|
|
914
|
+
def self.values
|
|
915
|
+
end
|
|
916
|
+
end
|
|
917
|
+
|
|
918
|
+
# Ambient background sound to play during the call. null disables it.
|
|
919
|
+
module BackgroundSound
|
|
920
|
+
extend Revox::Internal::Type::Enum
|
|
921
|
+
|
|
922
|
+
TaggedSymbol =
|
|
923
|
+
T.type_alias do
|
|
924
|
+
T.all(
|
|
925
|
+
Symbol,
|
|
926
|
+
Revox::Models::AssistantCloneResponse::Assistant::BackgroundSound
|
|
927
|
+
)
|
|
928
|
+
end
|
|
929
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
930
|
+
|
|
931
|
+
AUDIO_OFFICE_OGG =
|
|
932
|
+
T.let(
|
|
933
|
+
:"audio/office.ogg",
|
|
934
|
+
Revox::Models::AssistantCloneResponse::Assistant::BackgroundSound::TaggedSymbol
|
|
935
|
+
)
|
|
936
|
+
|
|
937
|
+
sig do
|
|
938
|
+
override.returns(
|
|
939
|
+
T::Array[
|
|
940
|
+
Revox::Models::AssistantCloneResponse::Assistant::BackgroundSound::TaggedSymbol
|
|
941
|
+
]
|
|
942
|
+
)
|
|
943
|
+
end
|
|
944
|
+
def self.values
|
|
945
|
+
end
|
|
946
|
+
end
|
|
947
|
+
|
|
948
|
+
class Calendly < Revox::Internal::Type::BaseModel
|
|
949
|
+
OrHash =
|
|
950
|
+
T.type_alias do
|
|
951
|
+
T.any(
|
|
952
|
+
Revox::Models::AssistantCloneResponse::Assistant::Calendly,
|
|
953
|
+
Revox::Internal::AnyHash
|
|
954
|
+
)
|
|
955
|
+
end
|
|
956
|
+
|
|
957
|
+
# The connection ID representing the link between your Calendly account and Revox.
|
|
958
|
+
sig { returns(String) }
|
|
959
|
+
attr_accessor :connection_id
|
|
960
|
+
|
|
961
|
+
# The event type ID representing the event type to schedule. (eg:
|
|
962
|
+
# https://api.calendly.com/event_types/b2330295-2a91-4a1d-bb73-99e7707663d5)
|
|
963
|
+
sig { returns(String) }
|
|
964
|
+
attr_accessor :event_type_id
|
|
965
|
+
|
|
966
|
+
sig do
|
|
967
|
+
params(connection_id: String, event_type_id: String).returns(
|
|
968
|
+
T.attached_class
|
|
969
|
+
)
|
|
970
|
+
end
|
|
971
|
+
def self.new(
|
|
972
|
+
# The connection ID representing the link between your Calendly account and Revox.
|
|
973
|
+
connection_id:,
|
|
974
|
+
# The event type ID representing the event type to schedule. (eg:
|
|
975
|
+
# https://api.calendly.com/event_types/b2330295-2a91-4a1d-bb73-99e7707663d5)
|
|
976
|
+
event_type_id:
|
|
977
|
+
)
|
|
978
|
+
end
|
|
979
|
+
|
|
980
|
+
sig do
|
|
981
|
+
override.returns({ connection_id: String, event_type_id: String })
|
|
982
|
+
end
|
|
983
|
+
def to_hash
|
|
984
|
+
end
|
|
985
|
+
end
|
|
986
|
+
|
|
987
|
+
class CallRetryConfig < Revox::Internal::Type::BaseModel
|
|
988
|
+
OrHash =
|
|
989
|
+
T.type_alias do
|
|
990
|
+
T.any(
|
|
991
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig,
|
|
992
|
+
Revox::Internal::AnyHash
|
|
993
|
+
)
|
|
994
|
+
end
|
|
995
|
+
|
|
996
|
+
# Days of the week when calls are allowed, in the recipient's timezone. Default:
|
|
997
|
+
# Monday through Friday.
|
|
998
|
+
sig do
|
|
999
|
+
returns(
|
|
1000
|
+
T::Array[
|
|
1001
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1002
|
+
]
|
|
1003
|
+
)
|
|
1004
|
+
end
|
|
1005
|
+
attr_accessor :allowed_days
|
|
1006
|
+
|
|
1007
|
+
# If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
|
|
1008
|
+
# retry_delay_seconds) when attempt #1 didn't reach a human.
|
|
1009
|
+
# Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
|
|
1010
|
+
# Default: false.
|
|
1011
|
+
sig { returns(T::Boolean) }
|
|
1012
|
+
attr_accessor :call_twice_in_a_row
|
|
1013
|
+
|
|
1014
|
+
sig do
|
|
1015
|
+
returns(
|
|
1016
|
+
T::Array[
|
|
1017
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::CallingWindow
|
|
1018
|
+
]
|
|
1019
|
+
)
|
|
1020
|
+
end
|
|
1021
|
+
attr_accessor :calling_windows
|
|
1022
|
+
|
|
1023
|
+
# Maximum number of call retry attempts. Default: 3.
|
|
1024
|
+
sig { returns(Integer) }
|
|
1025
|
+
attr_accessor :max_retry_attempts
|
|
1026
|
+
|
|
1027
|
+
# Optional IANA timezone identifier to override the automatic timezone detection
|
|
1028
|
+
# from phone number. If not provided, timezone is determined from the recipient's
|
|
1029
|
+
# phone number country code. Examples: 'America/New_York', 'Europe/Paris'.
|
|
1030
|
+
sig { returns(T.nilable(String)) }
|
|
1031
|
+
attr_accessor :timezone
|
|
1032
|
+
|
|
1033
|
+
# Configuration for call retry behavior including time windows, delays, and max
|
|
1034
|
+
# iterations. If not provided, defaults will be used.
|
|
1035
|
+
sig do
|
|
1036
|
+
params(
|
|
1037
|
+
allowed_days:
|
|
1038
|
+
T::Array[
|
|
1039
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::OrSymbol
|
|
1040
|
+
],
|
|
1041
|
+
call_twice_in_a_row: T::Boolean,
|
|
1042
|
+
calling_windows:
|
|
1043
|
+
T::Array[
|
|
1044
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::CallingWindow::OrHash
|
|
1045
|
+
],
|
|
1046
|
+
max_retry_attempts: Integer,
|
|
1047
|
+
timezone: T.nilable(String)
|
|
1048
|
+
).returns(T.attached_class)
|
|
1049
|
+
end
|
|
1050
|
+
def self.new(
|
|
1051
|
+
# Days of the week when calls are allowed, in the recipient's timezone. Default:
|
|
1052
|
+
# Monday through Friday.
|
|
1053
|
+
allowed_days:,
|
|
1054
|
+
# If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
|
|
1055
|
+
# retry_delay_seconds) when attempt #1 didn't reach a human.
|
|
1056
|
+
# Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
|
|
1057
|
+
# Default: false.
|
|
1058
|
+
call_twice_in_a_row:,
|
|
1059
|
+
calling_windows:,
|
|
1060
|
+
# Maximum number of call retry attempts. Default: 3.
|
|
1061
|
+
max_retry_attempts:,
|
|
1062
|
+
# Optional IANA timezone identifier to override the automatic timezone detection
|
|
1063
|
+
# from phone number. If not provided, timezone is determined from the recipient's
|
|
1064
|
+
# phone number country code. Examples: 'America/New_York', 'Europe/Paris'.
|
|
1065
|
+
timezone: nil
|
|
1066
|
+
)
|
|
1067
|
+
end
|
|
1068
|
+
|
|
1069
|
+
sig do
|
|
1070
|
+
override.returns(
|
|
1071
|
+
{
|
|
1072
|
+
allowed_days:
|
|
1073
|
+
T::Array[
|
|
1074
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1075
|
+
],
|
|
1076
|
+
call_twice_in_a_row: T::Boolean,
|
|
1077
|
+
calling_windows:
|
|
1078
|
+
T::Array[
|
|
1079
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::CallingWindow
|
|
1080
|
+
],
|
|
1081
|
+
max_retry_attempts: Integer,
|
|
1082
|
+
timezone: T.nilable(String)
|
|
1083
|
+
}
|
|
1084
|
+
)
|
|
1085
|
+
end
|
|
1086
|
+
def to_hash
|
|
1087
|
+
end
|
|
1088
|
+
|
|
1089
|
+
module AllowedDay
|
|
1090
|
+
extend Revox::Internal::Type::Enum
|
|
1091
|
+
|
|
1092
|
+
TaggedSymbol =
|
|
1093
|
+
T.type_alias do
|
|
1094
|
+
T.all(
|
|
1095
|
+
Symbol,
|
|
1096
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay
|
|
1097
|
+
)
|
|
1098
|
+
end
|
|
1099
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1100
|
+
|
|
1101
|
+
MONDAY =
|
|
1102
|
+
T.let(
|
|
1103
|
+
:monday,
|
|
1104
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1105
|
+
)
|
|
1106
|
+
TUESDAY =
|
|
1107
|
+
T.let(
|
|
1108
|
+
:tuesday,
|
|
1109
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1110
|
+
)
|
|
1111
|
+
WEDNESDAY =
|
|
1112
|
+
T.let(
|
|
1113
|
+
:wednesday,
|
|
1114
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1115
|
+
)
|
|
1116
|
+
THURSDAY =
|
|
1117
|
+
T.let(
|
|
1118
|
+
:thursday,
|
|
1119
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1120
|
+
)
|
|
1121
|
+
FRIDAY =
|
|
1122
|
+
T.let(
|
|
1123
|
+
:friday,
|
|
1124
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1125
|
+
)
|
|
1126
|
+
SATURDAY =
|
|
1127
|
+
T.let(
|
|
1128
|
+
:saturday,
|
|
1129
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1130
|
+
)
|
|
1131
|
+
SUNDAY =
|
|
1132
|
+
T.let(
|
|
1133
|
+
:sunday,
|
|
1134
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1135
|
+
)
|
|
1136
|
+
|
|
1137
|
+
sig do
|
|
1138
|
+
override.returns(
|
|
1139
|
+
T::Array[
|
|
1140
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1141
|
+
]
|
|
1142
|
+
)
|
|
1143
|
+
end
|
|
1144
|
+
def self.values
|
|
1145
|
+
end
|
|
1146
|
+
end
|
|
1147
|
+
|
|
1148
|
+
class CallingWindow < Revox::Internal::Type::BaseModel
|
|
1149
|
+
OrHash =
|
|
1150
|
+
T.type_alias do
|
|
1151
|
+
T.any(
|
|
1152
|
+
Revox::Models::AssistantCloneResponse::Assistant::CallRetryConfig::CallingWindow,
|
|
1153
|
+
Revox::Internal::AnyHash
|
|
1154
|
+
)
|
|
1155
|
+
end
|
|
1156
|
+
|
|
1157
|
+
# End time for the calling window in the recipient's timezone (or
|
|
1158
|
+
# timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
|
|
1159
|
+
# Examples: '17:00', '6pm'. Default: '18:00'.
|
|
1160
|
+
sig { returns(String) }
|
|
1161
|
+
attr_accessor :calling_window_end_time
|
|
1162
|
+
|
|
1163
|
+
# Start time for the calling window in the recipient's timezone (or
|
|
1164
|
+
# timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
|
|
1165
|
+
# Examples: '09:00', '10am'. Default: '10:00'.
|
|
1166
|
+
sig { returns(String) }
|
|
1167
|
+
attr_accessor :calling_window_start_time
|
|
1168
|
+
|
|
1169
|
+
# Delay between retry attempts in seconds. Default: 7200 (2 hours).
|
|
1170
|
+
sig { returns(Integer) }
|
|
1171
|
+
attr_accessor :retry_delay_seconds
|
|
1172
|
+
|
|
1173
|
+
sig do
|
|
1174
|
+
params(
|
|
1175
|
+
calling_window_end_time: String,
|
|
1176
|
+
calling_window_start_time: String,
|
|
1177
|
+
retry_delay_seconds: Integer
|
|
1178
|
+
).returns(T.attached_class)
|
|
1179
|
+
end
|
|
1180
|
+
def self.new(
|
|
1181
|
+
# End time for the calling window in the recipient's timezone (or
|
|
1182
|
+
# timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
|
|
1183
|
+
# Examples: '17:00', '6pm'. Default: '18:00'.
|
|
1184
|
+
calling_window_end_time:,
|
|
1185
|
+
# Start time for the calling window in the recipient's timezone (or
|
|
1186
|
+
# timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
|
|
1187
|
+
# Examples: '09:00', '10am'. Default: '10:00'.
|
|
1188
|
+
calling_window_start_time:,
|
|
1189
|
+
# Delay between retry attempts in seconds. Default: 7200 (2 hours).
|
|
1190
|
+
retry_delay_seconds:
|
|
1191
|
+
)
|
|
1192
|
+
end
|
|
1193
|
+
|
|
1194
|
+
sig do
|
|
1195
|
+
override.returns(
|
|
1196
|
+
{
|
|
1197
|
+
calling_window_end_time: String,
|
|
1198
|
+
calling_window_start_time: String,
|
|
1199
|
+
retry_delay_seconds: Integer
|
|
1200
|
+
}
|
|
1201
|
+
)
|
|
1202
|
+
end
|
|
1203
|
+
def to_hash
|
|
1204
|
+
end
|
|
1205
|
+
end
|
|
1206
|
+
end
|
|
1207
|
+
|
|
1208
|
+
class CustomTool < Revox::Internal::Type::BaseModel
|
|
1209
|
+
OrHash =
|
|
1210
|
+
T.type_alias do
|
|
1211
|
+
T.any(
|
|
1212
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool,
|
|
1213
|
+
Revox::Internal::AnyHash
|
|
1214
|
+
)
|
|
1215
|
+
end
|
|
1216
|
+
|
|
1217
|
+
# JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
|
|
1218
|
+
# "{{name}}") for dynamic values
|
|
1219
|
+
sig { returns(T.nilable(String)) }
|
|
1220
|
+
attr_accessor :body_template
|
|
1221
|
+
|
|
1222
|
+
# Human-readable description of what the tool does, used by the LLM to decide when
|
|
1223
|
+
# to call it
|
|
1224
|
+
sig { returns(String) }
|
|
1225
|
+
attr_accessor :description
|
|
1226
|
+
|
|
1227
|
+
# HTTP headers to include in the request. Values support {{variable}} placeholders
|
|
1228
|
+
sig do
|
|
1229
|
+
returns(
|
|
1230
|
+
T::Array[
|
|
1231
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Header
|
|
1232
|
+
]
|
|
1233
|
+
)
|
|
1234
|
+
end
|
|
1235
|
+
attr_accessor :headers
|
|
1236
|
+
|
|
1237
|
+
# Schema defining the parameters the LLM should extract from the conversation to
|
|
1238
|
+
# pass to this tool
|
|
1239
|
+
sig do
|
|
1240
|
+
returns(
|
|
1241
|
+
T::Array[
|
|
1242
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema
|
|
1243
|
+
]
|
|
1244
|
+
)
|
|
1245
|
+
end
|
|
1246
|
+
attr_accessor :input_schema
|
|
1247
|
+
|
|
1248
|
+
# HTTP method to use when calling the API endpoint
|
|
1249
|
+
sig do
|
|
1250
|
+
returns(
|
|
1251
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method::TaggedSymbol
|
|
1252
|
+
)
|
|
1253
|
+
end
|
|
1254
|
+
attr_accessor :method_
|
|
1255
|
+
|
|
1256
|
+
# Unique tool name in lowercase_snake_case (e.g. check_inventory)
|
|
1257
|
+
sig { returns(String) }
|
|
1258
|
+
attr_accessor :name
|
|
1259
|
+
|
|
1260
|
+
# Query string parameters appended to the URL. Values support {{variable}}
|
|
1261
|
+
# placeholders
|
|
1262
|
+
sig do
|
|
1263
|
+
returns(
|
|
1264
|
+
T::Array[
|
|
1265
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::QueryParam
|
|
1266
|
+
]
|
|
1267
|
+
)
|
|
1268
|
+
end
|
|
1269
|
+
attr_accessor :query_params
|
|
1270
|
+
|
|
1271
|
+
# Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
|
|
1272
|
+
# values
|
|
1273
|
+
sig { returns(String) }
|
|
1274
|
+
attr_accessor :url
|
|
1275
|
+
|
|
1276
|
+
sig do
|
|
1277
|
+
params(
|
|
1278
|
+
body_template: T.nilable(String),
|
|
1279
|
+
description: String,
|
|
1280
|
+
headers:
|
|
1281
|
+
T::Array[
|
|
1282
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Header::OrHash
|
|
1283
|
+
],
|
|
1284
|
+
input_schema:
|
|
1285
|
+
T::Array[
|
|
1286
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::OrHash
|
|
1287
|
+
],
|
|
1288
|
+
method_:
|
|
1289
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method::OrSymbol,
|
|
1290
|
+
name: String,
|
|
1291
|
+
query_params:
|
|
1292
|
+
T::Array[
|
|
1293
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::QueryParam::OrHash
|
|
1294
|
+
],
|
|
1295
|
+
url: String
|
|
1296
|
+
).returns(T.attached_class)
|
|
1297
|
+
end
|
|
1298
|
+
def self.new(
|
|
1299
|
+
# JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
|
|
1300
|
+
# "{{name}}") for dynamic values
|
|
1301
|
+
body_template:,
|
|
1302
|
+
# Human-readable description of what the tool does, used by the LLM to decide when
|
|
1303
|
+
# to call it
|
|
1304
|
+
description:,
|
|
1305
|
+
# HTTP headers to include in the request. Values support {{variable}} placeholders
|
|
1306
|
+
headers:,
|
|
1307
|
+
# Schema defining the parameters the LLM should extract from the conversation to
|
|
1308
|
+
# pass to this tool
|
|
1309
|
+
input_schema:,
|
|
1310
|
+
# HTTP method to use when calling the API endpoint
|
|
1311
|
+
method_:,
|
|
1312
|
+
# Unique tool name in lowercase_snake_case (e.g. check_inventory)
|
|
1313
|
+
name:,
|
|
1314
|
+
# Query string parameters appended to the URL. Values support {{variable}}
|
|
1315
|
+
# placeholders
|
|
1316
|
+
query_params:,
|
|
1317
|
+
# Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
|
|
1318
|
+
# values
|
|
1319
|
+
url:
|
|
1320
|
+
)
|
|
1321
|
+
end
|
|
1322
|
+
|
|
1323
|
+
sig do
|
|
1324
|
+
override.returns(
|
|
1325
|
+
{
|
|
1326
|
+
body_template: T.nilable(String),
|
|
1327
|
+
description: String,
|
|
1328
|
+
headers:
|
|
1329
|
+
T::Array[
|
|
1330
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Header
|
|
1331
|
+
],
|
|
1332
|
+
input_schema:
|
|
1333
|
+
T::Array[
|
|
1334
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema
|
|
1335
|
+
],
|
|
1336
|
+
method_:
|
|
1337
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method::TaggedSymbol,
|
|
1338
|
+
name: String,
|
|
1339
|
+
query_params:
|
|
1340
|
+
T::Array[
|
|
1341
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::QueryParam
|
|
1342
|
+
],
|
|
1343
|
+
url: String
|
|
1344
|
+
}
|
|
1345
|
+
)
|
|
1346
|
+
end
|
|
1347
|
+
def to_hash
|
|
1348
|
+
end
|
|
1349
|
+
|
|
1350
|
+
class Header < Revox::Internal::Type::BaseModel
|
|
1351
|
+
OrHash =
|
|
1352
|
+
T.type_alias do
|
|
1353
|
+
T.any(
|
|
1354
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Header,
|
|
1355
|
+
Revox::Internal::AnyHash
|
|
1356
|
+
)
|
|
1357
|
+
end
|
|
1358
|
+
|
|
1359
|
+
sig { returns(String) }
|
|
1360
|
+
attr_accessor :key
|
|
1361
|
+
|
|
1362
|
+
sig { returns(String) }
|
|
1363
|
+
attr_accessor :value
|
|
1364
|
+
|
|
1365
|
+
sig { params(key: String, value: String).returns(T.attached_class) }
|
|
1366
|
+
def self.new(key:, value:)
|
|
1367
|
+
end
|
|
1368
|
+
|
|
1369
|
+
sig { override.returns({ key: String, value: String }) }
|
|
1370
|
+
def to_hash
|
|
1371
|
+
end
|
|
1372
|
+
end
|
|
1373
|
+
|
|
1374
|
+
class InputSchema < Revox::Internal::Type::BaseModel
|
|
1375
|
+
OrHash =
|
|
1376
|
+
T.type_alias do
|
|
1377
|
+
T.any(
|
|
1378
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema,
|
|
1379
|
+
Revox::Internal::AnyHash
|
|
1380
|
+
)
|
|
1381
|
+
end
|
|
1382
|
+
|
|
1383
|
+
sig { returns(String) }
|
|
1384
|
+
attr_accessor :name
|
|
1385
|
+
|
|
1386
|
+
sig { returns(T::Boolean) }
|
|
1387
|
+
attr_accessor :required
|
|
1388
|
+
|
|
1389
|
+
sig do
|
|
1390
|
+
returns(
|
|
1391
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1392
|
+
)
|
|
1393
|
+
end
|
|
1394
|
+
attr_accessor :type
|
|
1395
|
+
|
|
1396
|
+
sig { returns(T.nilable(String)) }
|
|
1397
|
+
attr_reader :description
|
|
1398
|
+
|
|
1399
|
+
sig { params(description: String).void }
|
|
1400
|
+
attr_writer :description
|
|
1401
|
+
|
|
1402
|
+
sig { returns(T.nilable(T::Array[String])) }
|
|
1403
|
+
attr_reader :enum_options
|
|
1404
|
+
|
|
1405
|
+
sig { params(enum_options: T::Array[String]).void }
|
|
1406
|
+
attr_writer :enum_options
|
|
1407
|
+
|
|
1408
|
+
sig do
|
|
1409
|
+
params(
|
|
1410
|
+
name: String,
|
|
1411
|
+
required: T::Boolean,
|
|
1412
|
+
type:
|
|
1413
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::OrSymbol,
|
|
1414
|
+
description: String,
|
|
1415
|
+
enum_options: T::Array[String]
|
|
1416
|
+
).returns(T.attached_class)
|
|
1417
|
+
end
|
|
1418
|
+
def self.new(
|
|
1419
|
+
name:,
|
|
1420
|
+
required:,
|
|
1421
|
+
type:,
|
|
1422
|
+
description: nil,
|
|
1423
|
+
enum_options: nil
|
|
1424
|
+
)
|
|
1425
|
+
end
|
|
1426
|
+
|
|
1427
|
+
sig do
|
|
1428
|
+
override.returns(
|
|
1429
|
+
{
|
|
1430
|
+
name: String,
|
|
1431
|
+
required: T::Boolean,
|
|
1432
|
+
type:
|
|
1433
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol,
|
|
1434
|
+
description: String,
|
|
1435
|
+
enum_options: T::Array[String]
|
|
1436
|
+
}
|
|
1437
|
+
)
|
|
1438
|
+
end
|
|
1439
|
+
def to_hash
|
|
1440
|
+
end
|
|
1441
|
+
|
|
1442
|
+
module Type
|
|
1443
|
+
extend Revox::Internal::Type::Enum
|
|
1444
|
+
|
|
1445
|
+
TaggedSymbol =
|
|
1446
|
+
T.type_alias do
|
|
1447
|
+
T.all(
|
|
1448
|
+
Symbol,
|
|
1449
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type
|
|
1450
|
+
)
|
|
1451
|
+
end
|
|
1452
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1453
|
+
|
|
1454
|
+
STRING =
|
|
1455
|
+
T.let(
|
|
1456
|
+
:string,
|
|
1457
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1458
|
+
)
|
|
1459
|
+
NUMBER =
|
|
1460
|
+
T.let(
|
|
1461
|
+
:number,
|
|
1462
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1463
|
+
)
|
|
1464
|
+
BOOLEAN =
|
|
1465
|
+
T.let(
|
|
1466
|
+
:boolean,
|
|
1467
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1468
|
+
)
|
|
1469
|
+
ENUM =
|
|
1470
|
+
T.let(
|
|
1471
|
+
:enum,
|
|
1472
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1473
|
+
)
|
|
1474
|
+
DATE =
|
|
1475
|
+
T.let(
|
|
1476
|
+
:date,
|
|
1477
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1478
|
+
)
|
|
1479
|
+
DATETIME =
|
|
1480
|
+
T.let(
|
|
1481
|
+
:datetime,
|
|
1482
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1483
|
+
)
|
|
1484
|
+
|
|
1485
|
+
sig do
|
|
1486
|
+
override.returns(
|
|
1487
|
+
T::Array[
|
|
1488
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1489
|
+
]
|
|
1490
|
+
)
|
|
1491
|
+
end
|
|
1492
|
+
def self.values
|
|
1493
|
+
end
|
|
1494
|
+
end
|
|
1495
|
+
end
|
|
1496
|
+
|
|
1497
|
+
# HTTP method to use when calling the API endpoint
|
|
1498
|
+
module Method
|
|
1499
|
+
extend Revox::Internal::Type::Enum
|
|
1500
|
+
|
|
1501
|
+
TaggedSymbol =
|
|
1502
|
+
T.type_alias do
|
|
1503
|
+
T.all(
|
|
1504
|
+
Symbol,
|
|
1505
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method
|
|
1506
|
+
)
|
|
1507
|
+
end
|
|
1508
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1509
|
+
|
|
1510
|
+
GET =
|
|
1511
|
+
T.let(
|
|
1512
|
+
:GET,
|
|
1513
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method::TaggedSymbol
|
|
1514
|
+
)
|
|
1515
|
+
POST =
|
|
1516
|
+
T.let(
|
|
1517
|
+
:POST,
|
|
1518
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method::TaggedSymbol
|
|
1519
|
+
)
|
|
1520
|
+
PUT =
|
|
1521
|
+
T.let(
|
|
1522
|
+
:PUT,
|
|
1523
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method::TaggedSymbol
|
|
1524
|
+
)
|
|
1525
|
+
PATCH =
|
|
1526
|
+
T.let(
|
|
1527
|
+
:PATCH,
|
|
1528
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method::TaggedSymbol
|
|
1529
|
+
)
|
|
1530
|
+
DELETE =
|
|
1531
|
+
T.let(
|
|
1532
|
+
:DELETE,
|
|
1533
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method::TaggedSymbol
|
|
1534
|
+
)
|
|
1535
|
+
|
|
1536
|
+
sig do
|
|
1537
|
+
override.returns(
|
|
1538
|
+
T::Array[
|
|
1539
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::Method::TaggedSymbol
|
|
1540
|
+
]
|
|
1541
|
+
)
|
|
1542
|
+
end
|
|
1543
|
+
def self.values
|
|
1544
|
+
end
|
|
1545
|
+
end
|
|
1546
|
+
|
|
1547
|
+
class QueryParam < Revox::Internal::Type::BaseModel
|
|
1548
|
+
OrHash =
|
|
1549
|
+
T.type_alias do
|
|
1550
|
+
T.any(
|
|
1551
|
+
Revox::Models::AssistantCloneResponse::Assistant::CustomTool::QueryParam,
|
|
1552
|
+
Revox::Internal::AnyHash
|
|
1553
|
+
)
|
|
1554
|
+
end
|
|
1555
|
+
|
|
1556
|
+
sig { returns(String) }
|
|
1557
|
+
attr_accessor :key
|
|
1558
|
+
|
|
1559
|
+
sig { returns(String) }
|
|
1560
|
+
attr_accessor :value
|
|
1561
|
+
|
|
1562
|
+
sig { params(key: String, value: String).returns(T.attached_class) }
|
|
1563
|
+
def self.new(key:, value:)
|
|
1564
|
+
end
|
|
1565
|
+
|
|
1566
|
+
sig { override.returns({ key: String, value: String }) }
|
|
1567
|
+
def to_hash
|
|
1568
|
+
end
|
|
1569
|
+
end
|
|
1570
|
+
end
|
|
1571
|
+
|
|
1572
|
+
# The language used for the notification email content. One of "en" or "fr".
|
|
1573
|
+
module EmailNotificationLanguage
|
|
1574
|
+
extend Revox::Internal::Type::Enum
|
|
1575
|
+
|
|
1576
|
+
TaggedSymbol =
|
|
1577
|
+
T.type_alias do
|
|
1578
|
+
T.all(
|
|
1579
|
+
Symbol,
|
|
1580
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationLanguage
|
|
1581
|
+
)
|
|
1582
|
+
end
|
|
1583
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1584
|
+
|
|
1585
|
+
EN =
|
|
1586
|
+
T.let(
|
|
1587
|
+
:en,
|
|
1588
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
|
|
1589
|
+
)
|
|
1590
|
+
FR =
|
|
1591
|
+
T.let(
|
|
1592
|
+
:fr,
|
|
1593
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
|
|
1594
|
+
)
|
|
1595
|
+
|
|
1596
|
+
sig do
|
|
1597
|
+
override.returns(
|
|
1598
|
+
T::Array[
|
|
1599
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
|
|
1600
|
+
]
|
|
1601
|
+
)
|
|
1602
|
+
end
|
|
1603
|
+
def self.values
|
|
1604
|
+
end
|
|
1605
|
+
end
|
|
1606
|
+
|
|
1607
|
+
module EmailNotificationOutcome
|
|
1608
|
+
extend Revox::Internal::Type::Enum
|
|
1609
|
+
|
|
1610
|
+
TaggedSymbol =
|
|
1611
|
+
T.type_alias do
|
|
1612
|
+
T.all(
|
|
1613
|
+
Symbol,
|
|
1614
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome
|
|
1615
|
+
)
|
|
1616
|
+
end
|
|
1617
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1618
|
+
|
|
1619
|
+
NOT_INTERESTED =
|
|
1620
|
+
T.let(
|
|
1621
|
+
:not_interested,
|
|
1622
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
1623
|
+
)
|
|
1624
|
+
INTERESTED =
|
|
1625
|
+
T.let(
|
|
1626
|
+
:interested,
|
|
1627
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
1628
|
+
)
|
|
1629
|
+
COMPLETED =
|
|
1630
|
+
T.let(
|
|
1631
|
+
:completed,
|
|
1632
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
1633
|
+
)
|
|
1634
|
+
REQUESTED_CALLBACK_LATER =
|
|
1635
|
+
T.let(
|
|
1636
|
+
:requested_callback_later,
|
|
1637
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
1638
|
+
)
|
|
1639
|
+
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
1640
|
+
T.let(
|
|
1641
|
+
:requested_callback_new_number,
|
|
1642
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
1643
|
+
)
|
|
1644
|
+
DO_NOT_CONTACT =
|
|
1645
|
+
T.let(
|
|
1646
|
+
:do_not_contact,
|
|
1647
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
1648
|
+
)
|
|
1649
|
+
AI_AVERSE =
|
|
1650
|
+
T.let(
|
|
1651
|
+
:ai_averse,
|
|
1652
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
1653
|
+
)
|
|
1654
|
+
NONE =
|
|
1655
|
+
T.let(
|
|
1656
|
+
:none,
|
|
1657
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
1658
|
+
)
|
|
1659
|
+
|
|
1660
|
+
sig do
|
|
1661
|
+
override.returns(
|
|
1662
|
+
T::Array[
|
|
1663
|
+
Revox::Models::AssistantCloneResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
|
|
1664
|
+
]
|
|
1665
|
+
)
|
|
1666
|
+
end
|
|
1667
|
+
def self.values
|
|
1668
|
+
end
|
|
1669
|
+
end
|
|
1670
|
+
|
|
1671
|
+
module FirstSentenceMode
|
|
1672
|
+
extend Revox::Internal::Type::Enum
|
|
1673
|
+
|
|
1674
|
+
TaggedSymbol =
|
|
1675
|
+
T.type_alias do
|
|
1676
|
+
T.all(
|
|
1677
|
+
Symbol,
|
|
1678
|
+
Revox::Models::AssistantCloneResponse::Assistant::FirstSentenceMode
|
|
1679
|
+
)
|
|
1680
|
+
end
|
|
1681
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1682
|
+
|
|
1683
|
+
GENERATED =
|
|
1684
|
+
T.let(
|
|
1685
|
+
:generated,
|
|
1686
|
+
Revox::Models::AssistantCloneResponse::Assistant::FirstSentenceMode::TaggedSymbol
|
|
1687
|
+
)
|
|
1688
|
+
STATIC =
|
|
1689
|
+
T.let(
|
|
1690
|
+
:static,
|
|
1691
|
+
Revox::Models::AssistantCloneResponse::Assistant::FirstSentenceMode::TaggedSymbol
|
|
1692
|
+
)
|
|
1693
|
+
NONE =
|
|
1694
|
+
T.let(
|
|
1695
|
+
:none,
|
|
1696
|
+
Revox::Models::AssistantCloneResponse::Assistant::FirstSentenceMode::TaggedSymbol
|
|
1697
|
+
)
|
|
1698
|
+
|
|
1699
|
+
sig do
|
|
1700
|
+
override.returns(
|
|
1701
|
+
T::Array[
|
|
1702
|
+
Revox::Models::AssistantCloneResponse::Assistant::FirstSentenceMode::TaggedSymbol
|
|
1703
|
+
]
|
|
1704
|
+
)
|
|
1705
|
+
end
|
|
1706
|
+
def self.values
|
|
1707
|
+
end
|
|
1708
|
+
end
|
|
1709
|
+
|
|
1710
|
+
# Warm or cold transfer when transfer_phone_number is set; null when transfer is
|
|
1711
|
+
# not configured.
|
|
1712
|
+
module HumanTransferMode
|
|
1713
|
+
extend Revox::Internal::Type::Enum
|
|
1714
|
+
|
|
1715
|
+
TaggedSymbol =
|
|
1716
|
+
T.type_alias do
|
|
1717
|
+
T.all(
|
|
1718
|
+
Symbol,
|
|
1719
|
+
Revox::Models::AssistantCloneResponse::Assistant::HumanTransferMode
|
|
1720
|
+
)
|
|
1721
|
+
end
|
|
1722
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1723
|
+
|
|
1724
|
+
WARM =
|
|
1725
|
+
T.let(
|
|
1726
|
+
:warm,
|
|
1727
|
+
Revox::Models::AssistantCloneResponse::Assistant::HumanTransferMode::TaggedSymbol
|
|
1728
|
+
)
|
|
1729
|
+
COLD =
|
|
1730
|
+
T.let(
|
|
1731
|
+
:cold,
|
|
1732
|
+
Revox::Models::AssistantCloneResponse::Assistant::HumanTransferMode::TaggedSymbol
|
|
1733
|
+
)
|
|
1734
|
+
|
|
1735
|
+
sig do
|
|
1736
|
+
override.returns(
|
|
1737
|
+
T::Array[
|
|
1738
|
+
Revox::Models::AssistantCloneResponse::Assistant::HumanTransferMode::TaggedSymbol
|
|
1739
|
+
]
|
|
1740
|
+
)
|
|
1741
|
+
end
|
|
1742
|
+
def self.values
|
|
1743
|
+
end
|
|
1744
|
+
end
|
|
1745
|
+
|
|
1746
|
+
module LlmModel
|
|
1747
|
+
extend Revox::Internal::Type::Union
|
|
1748
|
+
|
|
1749
|
+
Variants =
|
|
1750
|
+
T.type_alias do
|
|
1751
|
+
T.any(
|
|
1752
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0,
|
|
1753
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember1,
|
|
1754
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember2,
|
|
1755
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3
|
|
1756
|
+
)
|
|
1757
|
+
end
|
|
1758
|
+
|
|
1759
|
+
class UnionMember0 < Revox::Internal::Type::BaseModel
|
|
1760
|
+
OrHash =
|
|
1761
|
+
T.type_alias do
|
|
1762
|
+
T.any(
|
|
1763
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0,
|
|
1764
|
+
Revox::Internal::AnyHash
|
|
1765
|
+
)
|
|
1766
|
+
end
|
|
1767
|
+
|
|
1768
|
+
sig do
|
|
1769
|
+
returns(
|
|
1770
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
|
|
1771
|
+
)
|
|
1772
|
+
end
|
|
1773
|
+
attr_accessor :name
|
|
1774
|
+
|
|
1775
|
+
sig { returns(Symbol) }
|
|
1776
|
+
attr_accessor :type
|
|
1777
|
+
|
|
1778
|
+
sig do
|
|
1779
|
+
params(
|
|
1780
|
+
name:
|
|
1781
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0::Name::OrSymbol,
|
|
1782
|
+
type: Symbol
|
|
1783
|
+
).returns(T.attached_class)
|
|
1784
|
+
end
|
|
1785
|
+
def self.new(name:, type: :"dedicated-instance")
|
|
1786
|
+
end
|
|
1787
|
+
|
|
1788
|
+
sig do
|
|
1789
|
+
override.returns(
|
|
1790
|
+
{
|
|
1791
|
+
name:
|
|
1792
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol,
|
|
1793
|
+
type: Symbol
|
|
1794
|
+
}
|
|
1795
|
+
)
|
|
1796
|
+
end
|
|
1797
|
+
def to_hash
|
|
1798
|
+
end
|
|
1799
|
+
|
|
1800
|
+
module Name
|
|
1801
|
+
extend Revox::Internal::Type::Enum
|
|
1802
|
+
|
|
1803
|
+
TaggedSymbol =
|
|
1804
|
+
T.type_alias do
|
|
1805
|
+
T.all(
|
|
1806
|
+
Symbol,
|
|
1807
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0::Name
|
|
1808
|
+
)
|
|
1809
|
+
end
|
|
1810
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1811
|
+
|
|
1812
|
+
GPT_4_1 =
|
|
1813
|
+
T.let(
|
|
1814
|
+
:"gpt-4.1",
|
|
1815
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
|
|
1816
|
+
)
|
|
1817
|
+
MINISTRAL_3_8B_INSTRUCT =
|
|
1818
|
+
T.let(
|
|
1819
|
+
:"ministral-3-8b-instruct",
|
|
1820
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
|
|
1821
|
+
)
|
|
1822
|
+
|
|
1823
|
+
sig do
|
|
1824
|
+
override.returns(
|
|
1825
|
+
T::Array[
|
|
1826
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
|
|
1827
|
+
]
|
|
1828
|
+
)
|
|
1829
|
+
end
|
|
1830
|
+
def self.values
|
|
1831
|
+
end
|
|
1832
|
+
end
|
|
1833
|
+
end
|
|
1834
|
+
|
|
1835
|
+
class UnionMember1 < Revox::Internal::Type::BaseModel
|
|
1836
|
+
OrHash =
|
|
1837
|
+
T.type_alias do
|
|
1838
|
+
T.any(
|
|
1839
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember1,
|
|
1840
|
+
Revox::Internal::AnyHash
|
|
1841
|
+
)
|
|
1842
|
+
end
|
|
1843
|
+
|
|
1844
|
+
# The model ID to use from OpenRouter. eg: openai/gpt-4.1
|
|
1845
|
+
sig { returns(String) }
|
|
1846
|
+
attr_accessor :openrouter_model_id
|
|
1847
|
+
|
|
1848
|
+
# The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
|
|
1849
|
+
sig { returns(String) }
|
|
1850
|
+
attr_accessor :openrouter_provider
|
|
1851
|
+
|
|
1852
|
+
# Use a model from OpenRouter.
|
|
1853
|
+
sig { returns(Symbol) }
|
|
1854
|
+
attr_accessor :type
|
|
1855
|
+
|
|
1856
|
+
sig do
|
|
1857
|
+
params(
|
|
1858
|
+
openrouter_model_id: String,
|
|
1859
|
+
openrouter_provider: String,
|
|
1860
|
+
type: Symbol
|
|
1861
|
+
).returns(T.attached_class)
|
|
1862
|
+
end
|
|
1863
|
+
def self.new(
|
|
1864
|
+
# The model ID to use from OpenRouter. eg: openai/gpt-4.1
|
|
1865
|
+
openrouter_model_id:,
|
|
1866
|
+
# The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
|
|
1867
|
+
openrouter_provider:,
|
|
1868
|
+
# Use a model from OpenRouter.
|
|
1869
|
+
type: :openrouter
|
|
1870
|
+
)
|
|
1871
|
+
end
|
|
1872
|
+
|
|
1873
|
+
sig do
|
|
1874
|
+
override.returns(
|
|
1875
|
+
{
|
|
1876
|
+
openrouter_model_id: String,
|
|
1877
|
+
openrouter_provider: String,
|
|
1878
|
+
type: Symbol
|
|
1879
|
+
}
|
|
1880
|
+
)
|
|
1881
|
+
end
|
|
1882
|
+
def to_hash
|
|
1883
|
+
end
|
|
1884
|
+
end
|
|
1885
|
+
|
|
1886
|
+
class UnionMember2 < Revox::Internal::Type::BaseModel
|
|
1887
|
+
OrHash =
|
|
1888
|
+
T.type_alias do
|
|
1889
|
+
T.any(
|
|
1890
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember2,
|
|
1891
|
+
Revox::Internal::AnyHash
|
|
1892
|
+
)
|
|
1893
|
+
end
|
|
1894
|
+
|
|
1895
|
+
# API key sent as Bearer token to the custom endpoint.
|
|
1896
|
+
sig { returns(String) }
|
|
1897
|
+
attr_accessor :api_key
|
|
1898
|
+
|
|
1899
|
+
# Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
|
|
1900
|
+
sig { returns(String) }
|
|
1901
|
+
attr_accessor :api_url
|
|
1902
|
+
|
|
1903
|
+
# Model name as expected by the provider, e.g. meta-llama/llama-3-70b
|
|
1904
|
+
sig { returns(String) }
|
|
1905
|
+
attr_accessor :model_name
|
|
1906
|
+
|
|
1907
|
+
# OpenAI-compatible chat completions API (bring your own endpoint and key).
|
|
1908
|
+
sig { returns(Symbol) }
|
|
1909
|
+
attr_accessor :type
|
|
1910
|
+
|
|
1911
|
+
sig do
|
|
1912
|
+
params(
|
|
1913
|
+
api_key: String,
|
|
1914
|
+
api_url: String,
|
|
1915
|
+
model_name: String,
|
|
1916
|
+
type: Symbol
|
|
1917
|
+
).returns(T.attached_class)
|
|
1918
|
+
end
|
|
1919
|
+
def self.new(
|
|
1920
|
+
# API key sent as Bearer token to the custom endpoint.
|
|
1921
|
+
api_key:,
|
|
1922
|
+
# Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
|
|
1923
|
+
api_url:,
|
|
1924
|
+
# Model name as expected by the provider, e.g. meta-llama/llama-3-70b
|
|
1925
|
+
model_name:,
|
|
1926
|
+
# OpenAI-compatible chat completions API (bring your own endpoint and key).
|
|
1927
|
+
type: :custom
|
|
1928
|
+
)
|
|
1929
|
+
end
|
|
1930
|
+
|
|
1931
|
+
sig do
|
|
1932
|
+
override.returns(
|
|
1933
|
+
{
|
|
1934
|
+
api_key: String,
|
|
1935
|
+
api_url: String,
|
|
1936
|
+
model_name: String,
|
|
1937
|
+
type: Symbol
|
|
1938
|
+
}
|
|
1939
|
+
)
|
|
1940
|
+
end
|
|
1941
|
+
def to_hash
|
|
1942
|
+
end
|
|
1943
|
+
end
|
|
1944
|
+
|
|
1945
|
+
class UnionMember3 < Revox::Internal::Type::BaseModel
|
|
1946
|
+
OrHash =
|
|
1947
|
+
T.type_alias do
|
|
1948
|
+
T.any(
|
|
1949
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3,
|
|
1950
|
+
Revox::Internal::AnyHash
|
|
1951
|
+
)
|
|
1952
|
+
end
|
|
1953
|
+
|
|
1954
|
+
# The provider to use from Realtime. eg: openai, google.
|
|
1955
|
+
sig do
|
|
1956
|
+
returns(
|
|
1957
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
1958
|
+
)
|
|
1959
|
+
end
|
|
1960
|
+
attr_accessor :provider
|
|
1961
|
+
|
|
1962
|
+
# The model ID to use from Realtime. eg: gpt-4.1
|
|
1963
|
+
sig { returns(String) }
|
|
1964
|
+
attr_accessor :realtime_model_id
|
|
1965
|
+
|
|
1966
|
+
# Use a model from Realtime.
|
|
1967
|
+
sig { returns(Symbol) }
|
|
1968
|
+
attr_accessor :type
|
|
1969
|
+
|
|
1970
|
+
# Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
|
|
1971
|
+
sig { returns(T.nilable(String)) }
|
|
1972
|
+
attr_reader :realtime_voice_id
|
|
1973
|
+
|
|
1974
|
+
sig { params(realtime_voice_id: String).void }
|
|
1975
|
+
attr_writer :realtime_voice_id
|
|
1976
|
+
|
|
1977
|
+
sig do
|
|
1978
|
+
params(
|
|
1979
|
+
provider:
|
|
1980
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3::Provider::OrSymbol,
|
|
1981
|
+
realtime_model_id: String,
|
|
1982
|
+
realtime_voice_id: String,
|
|
1983
|
+
type: Symbol
|
|
1984
|
+
).returns(T.attached_class)
|
|
1985
|
+
end
|
|
1986
|
+
def self.new(
|
|
1987
|
+
# The provider to use from Realtime. eg: openai, google.
|
|
1988
|
+
provider:,
|
|
1989
|
+
# The model ID to use from Realtime. eg: gpt-4.1
|
|
1990
|
+
realtime_model_id:,
|
|
1991
|
+
# Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
|
|
1992
|
+
realtime_voice_id: nil,
|
|
1993
|
+
# Use a model from Realtime.
|
|
1994
|
+
type: :realtime
|
|
1995
|
+
)
|
|
1996
|
+
end
|
|
1997
|
+
|
|
1998
|
+
sig do
|
|
1999
|
+
override.returns(
|
|
2000
|
+
{
|
|
2001
|
+
provider:
|
|
2002
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol,
|
|
2003
|
+
realtime_model_id: String,
|
|
2004
|
+
type: Symbol,
|
|
2005
|
+
realtime_voice_id: String
|
|
2006
|
+
}
|
|
2007
|
+
)
|
|
2008
|
+
end
|
|
2009
|
+
def to_hash
|
|
2010
|
+
end
|
|
2011
|
+
|
|
2012
|
+
# The provider to use from Realtime. eg: openai, google.
|
|
2013
|
+
module Provider
|
|
2014
|
+
extend Revox::Internal::Type::Enum
|
|
2015
|
+
|
|
2016
|
+
TaggedSymbol =
|
|
2017
|
+
T.type_alias do
|
|
2018
|
+
T.all(
|
|
2019
|
+
Symbol,
|
|
2020
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3::Provider
|
|
2021
|
+
)
|
|
2022
|
+
end
|
|
2023
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2024
|
+
|
|
2025
|
+
OPENAI =
|
|
2026
|
+
T.let(
|
|
2027
|
+
:openai,
|
|
2028
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
2029
|
+
)
|
|
2030
|
+
GOOGLE =
|
|
2031
|
+
T.let(
|
|
2032
|
+
:google,
|
|
2033
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
2034
|
+
)
|
|
2035
|
+
|
|
2036
|
+
sig do
|
|
2037
|
+
override.returns(
|
|
2038
|
+
T::Array[
|
|
2039
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
2040
|
+
]
|
|
2041
|
+
)
|
|
2042
|
+
end
|
|
2043
|
+
def self.values
|
|
2044
|
+
end
|
|
2045
|
+
end
|
|
2046
|
+
end
|
|
2047
|
+
|
|
2048
|
+
sig do
|
|
2049
|
+
override.returns(
|
|
2050
|
+
T::Array[
|
|
2051
|
+
Revox::Models::AssistantCloneResponse::Assistant::LlmModel::Variants
|
|
2052
|
+
]
|
|
2053
|
+
)
|
|
2054
|
+
end
|
|
2055
|
+
def self.variants
|
|
2056
|
+
end
|
|
2057
|
+
end
|
|
2058
|
+
|
|
2059
|
+
class Position < Revox::Internal::Type::BaseModel
|
|
2060
|
+
OrHash =
|
|
2061
|
+
T.type_alias do
|
|
2062
|
+
T.any(
|
|
2063
|
+
Revox::Models::AssistantCloneResponse::Assistant::Position,
|
|
2064
|
+
Revox::Internal::AnyHash
|
|
2065
|
+
)
|
|
2066
|
+
end
|
|
2067
|
+
|
|
2068
|
+
sig { returns(Float) }
|
|
2069
|
+
attr_accessor :x
|
|
2070
|
+
|
|
2071
|
+
sig { returns(Float) }
|
|
2072
|
+
attr_accessor :y_
|
|
2073
|
+
|
|
2074
|
+
sig { params(x: Float, y_: Float).returns(T.attached_class) }
|
|
2075
|
+
def self.new(x:, y_:)
|
|
2076
|
+
end
|
|
2077
|
+
|
|
2078
|
+
sig { override.returns({ x: Float, y_: Float }) }
|
|
2079
|
+
def to_hash
|
|
2080
|
+
end
|
|
2081
|
+
end
|
|
2082
|
+
|
|
2083
|
+
class PromptFlow < Revox::Internal::Type::BaseModel
|
|
2084
|
+
OrHash =
|
|
2085
|
+
T.type_alias do
|
|
2086
|
+
T.any(
|
|
2087
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow,
|
|
2088
|
+
Revox::Internal::AnyHash
|
|
2089
|
+
)
|
|
2090
|
+
end
|
|
2091
|
+
|
|
2092
|
+
sig do
|
|
2093
|
+
returns(
|
|
2094
|
+
T::Array[
|
|
2095
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Edge
|
|
2096
|
+
]
|
|
2097
|
+
)
|
|
2098
|
+
end
|
|
2099
|
+
attr_accessor :edges
|
|
2100
|
+
|
|
2101
|
+
sig do
|
|
2102
|
+
returns(
|
|
2103
|
+
T::Array[
|
|
2104
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node
|
|
2105
|
+
]
|
|
2106
|
+
)
|
|
2107
|
+
end
|
|
2108
|
+
attr_accessor :nodes
|
|
2109
|
+
|
|
2110
|
+
sig do
|
|
2111
|
+
params(
|
|
2112
|
+
edges:
|
|
2113
|
+
T::Array[
|
|
2114
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Edge::OrHash
|
|
2115
|
+
],
|
|
2116
|
+
nodes:
|
|
2117
|
+
T::Array[
|
|
2118
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::OrHash
|
|
2119
|
+
]
|
|
2120
|
+
).returns(T.attached_class)
|
|
2121
|
+
end
|
|
2122
|
+
def self.new(edges:, nodes:)
|
|
2123
|
+
end
|
|
2124
|
+
|
|
2125
|
+
sig do
|
|
2126
|
+
override.returns(
|
|
2127
|
+
{
|
|
2128
|
+
edges:
|
|
2129
|
+
T::Array[
|
|
2130
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Edge
|
|
2131
|
+
],
|
|
2132
|
+
nodes:
|
|
2133
|
+
T::Array[
|
|
2134
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node
|
|
2135
|
+
]
|
|
2136
|
+
}
|
|
2137
|
+
)
|
|
2138
|
+
end
|
|
2139
|
+
def to_hash
|
|
2140
|
+
end
|
|
2141
|
+
|
|
2142
|
+
class Edge < Revox::Internal::Type::BaseModel
|
|
2143
|
+
OrHash =
|
|
2144
|
+
T.type_alias do
|
|
2145
|
+
T.any(
|
|
2146
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Edge,
|
|
2147
|
+
Revox::Internal::AnyHash
|
|
2148
|
+
)
|
|
2149
|
+
end
|
|
2150
|
+
|
|
2151
|
+
sig { returns(String) }
|
|
2152
|
+
attr_accessor :id
|
|
2153
|
+
|
|
2154
|
+
sig { returns(String) }
|
|
2155
|
+
attr_accessor :source
|
|
2156
|
+
|
|
2157
|
+
sig { returns(String) }
|
|
2158
|
+
attr_accessor :target
|
|
2159
|
+
|
|
2160
|
+
sig do
|
|
2161
|
+
params(id: String, source: String, target: String).returns(
|
|
2162
|
+
T.attached_class
|
|
2163
|
+
)
|
|
2164
|
+
end
|
|
2165
|
+
def self.new(id:, source:, target:)
|
|
2166
|
+
end
|
|
2167
|
+
|
|
2168
|
+
sig do
|
|
2169
|
+
override.returns({ id: String, source: String, target: String })
|
|
2170
|
+
end
|
|
2171
|
+
def to_hash
|
|
2172
|
+
end
|
|
2173
|
+
end
|
|
2174
|
+
|
|
2175
|
+
class Node < Revox::Internal::Type::BaseModel
|
|
2176
|
+
OrHash =
|
|
2177
|
+
T.type_alias do
|
|
2178
|
+
T.any(
|
|
2179
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node,
|
|
2180
|
+
Revox::Internal::AnyHash
|
|
2181
|
+
)
|
|
2182
|
+
end
|
|
2183
|
+
|
|
2184
|
+
sig { returns(String) }
|
|
2185
|
+
attr_accessor :id
|
|
2186
|
+
|
|
2187
|
+
sig do
|
|
2188
|
+
returns(
|
|
2189
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Data
|
|
2190
|
+
)
|
|
2191
|
+
end
|
|
2192
|
+
attr_reader :data
|
|
2193
|
+
|
|
2194
|
+
sig do
|
|
2195
|
+
params(
|
|
2196
|
+
data:
|
|
2197
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Data::OrHash
|
|
2198
|
+
).void
|
|
2199
|
+
end
|
|
2200
|
+
attr_writer :data
|
|
2201
|
+
|
|
2202
|
+
sig do
|
|
2203
|
+
returns(
|
|
2204
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Position
|
|
2205
|
+
)
|
|
2206
|
+
end
|
|
2207
|
+
attr_reader :position
|
|
2208
|
+
|
|
2209
|
+
sig do
|
|
2210
|
+
params(
|
|
2211
|
+
position:
|
|
2212
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Position::OrHash
|
|
2213
|
+
).void
|
|
2214
|
+
end
|
|
2215
|
+
attr_writer :position
|
|
2216
|
+
|
|
2217
|
+
sig { returns(Symbol) }
|
|
2218
|
+
attr_accessor :type
|
|
2219
|
+
|
|
2220
|
+
sig do
|
|
2221
|
+
params(
|
|
2222
|
+
id: String,
|
|
2223
|
+
data:
|
|
2224
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Data::OrHash,
|
|
2225
|
+
position:
|
|
2226
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Position::OrHash,
|
|
2227
|
+
type: Symbol
|
|
2228
|
+
).returns(T.attached_class)
|
|
2229
|
+
end
|
|
2230
|
+
def self.new(id:, data:, position:, type: :promptBlock)
|
|
2231
|
+
end
|
|
2232
|
+
|
|
2233
|
+
sig do
|
|
2234
|
+
override.returns(
|
|
2235
|
+
{
|
|
2236
|
+
id: String,
|
|
2237
|
+
data:
|
|
2238
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Data,
|
|
2239
|
+
position:
|
|
2240
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Position,
|
|
2241
|
+
type: Symbol
|
|
2242
|
+
}
|
|
2243
|
+
)
|
|
2244
|
+
end
|
|
2245
|
+
def to_hash
|
|
2246
|
+
end
|
|
2247
|
+
|
|
2248
|
+
class Data < Revox::Internal::Type::BaseModel
|
|
2249
|
+
OrHash =
|
|
2250
|
+
T.type_alias do
|
|
2251
|
+
T.any(
|
|
2252
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Data,
|
|
2253
|
+
Revox::Internal::AnyHash
|
|
2254
|
+
)
|
|
2255
|
+
end
|
|
2256
|
+
|
|
2257
|
+
sig { returns(String) }
|
|
2258
|
+
attr_accessor :body
|
|
2259
|
+
|
|
2260
|
+
sig { returns(String) }
|
|
2261
|
+
attr_accessor :title
|
|
2262
|
+
|
|
2263
|
+
sig do
|
|
2264
|
+
params(body: String, title: String).returns(T.attached_class)
|
|
2265
|
+
end
|
|
2266
|
+
def self.new(body:, title:)
|
|
2267
|
+
end
|
|
2268
|
+
|
|
2269
|
+
sig { override.returns({ body: String, title: String }) }
|
|
2270
|
+
def to_hash
|
|
2271
|
+
end
|
|
2272
|
+
end
|
|
2273
|
+
|
|
2274
|
+
class Position < Revox::Internal::Type::BaseModel
|
|
2275
|
+
OrHash =
|
|
2276
|
+
T.type_alias do
|
|
2277
|
+
T.any(
|
|
2278
|
+
Revox::Models::AssistantCloneResponse::Assistant::PromptFlow::Node::Position,
|
|
2279
|
+
Revox::Internal::AnyHash
|
|
2280
|
+
)
|
|
2281
|
+
end
|
|
2282
|
+
|
|
2283
|
+
sig { returns(Float) }
|
|
2284
|
+
attr_accessor :x
|
|
2285
|
+
|
|
2286
|
+
sig { returns(Float) }
|
|
2287
|
+
attr_accessor :y_
|
|
2288
|
+
|
|
2289
|
+
sig { params(x: Float, y_: Float).returns(T.attached_class) }
|
|
2290
|
+
def self.new(x:, y_:)
|
|
2291
|
+
end
|
|
2292
|
+
|
|
2293
|
+
sig { override.returns({ x: Float, y_: Float }) }
|
|
2294
|
+
def to_hash
|
|
2295
|
+
end
|
|
2296
|
+
end
|
|
2297
|
+
end
|
|
2298
|
+
end
|
|
2299
|
+
|
|
2300
|
+
class Slack < Revox::Internal::Type::BaseModel
|
|
2301
|
+
OrHash =
|
|
2302
|
+
T.type_alias do
|
|
2303
|
+
T.any(
|
|
2304
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack,
|
|
2305
|
+
Revox::Internal::AnyHash
|
|
2306
|
+
)
|
|
2307
|
+
end
|
|
2308
|
+
|
|
2309
|
+
# The Slack channel ID where the notification will be posted.
|
|
2310
|
+
sig { returns(String) }
|
|
2311
|
+
attr_accessor :channel_id
|
|
2312
|
+
|
|
2313
|
+
# The Nango connection ID linking the org's Slack workspace to Revox.
|
|
2314
|
+
sig { returns(String) }
|
|
2315
|
+
attr_accessor :connection_id
|
|
2316
|
+
|
|
2317
|
+
# Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
|
|
2318
|
+
# Use 'none' to notify when outcome is null.
|
|
2319
|
+
sig do
|
|
2320
|
+
returns(
|
|
2321
|
+
T::Array[
|
|
2322
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2323
|
+
]
|
|
2324
|
+
)
|
|
2325
|
+
end
|
|
2326
|
+
attr_accessor :outcomes
|
|
2327
|
+
|
|
2328
|
+
# Human-readable Slack channel name, cached for display in the UI.
|
|
2329
|
+
sig { returns(T.nilable(String)) }
|
|
2330
|
+
attr_accessor :channel_name
|
|
2331
|
+
|
|
2332
|
+
# Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
2333
|
+
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
|
|
2334
|
+
# {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
|
|
2335
|
+
# prompt_variables and structured_output keys. When null/empty a default template
|
|
2336
|
+
# is used.
|
|
2337
|
+
sig { returns(T.nilable(String)) }
|
|
2338
|
+
attr_accessor :template
|
|
2339
|
+
|
|
2340
|
+
sig do
|
|
2341
|
+
params(
|
|
2342
|
+
channel_id: String,
|
|
2343
|
+
connection_id: String,
|
|
2344
|
+
outcomes:
|
|
2345
|
+
T::Array[
|
|
2346
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::OrSymbol
|
|
2347
|
+
],
|
|
2348
|
+
channel_name: T.nilable(String),
|
|
2349
|
+
template: T.nilable(String)
|
|
2350
|
+
).returns(T.attached_class)
|
|
2351
|
+
end
|
|
2352
|
+
def self.new(
|
|
2353
|
+
# The Slack channel ID where the notification will be posted.
|
|
2354
|
+
channel_id:,
|
|
2355
|
+
# The Nango connection ID linking the org's Slack workspace to Revox.
|
|
2356
|
+
connection_id:,
|
|
2357
|
+
# Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
|
|
2358
|
+
# Use 'none' to notify when outcome is null.
|
|
2359
|
+
outcomes:,
|
|
2360
|
+
# Human-readable Slack channel name, cached for display in the UI.
|
|
2361
|
+
channel_name: nil,
|
|
2362
|
+
# Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
2363
|
+
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
|
|
2364
|
+
# {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
|
|
2365
|
+
# prompt_variables and structured_output keys. When null/empty a default template
|
|
2366
|
+
# is used.
|
|
2367
|
+
template: nil
|
|
2368
|
+
)
|
|
2369
|
+
end
|
|
2370
|
+
|
|
2371
|
+
sig do
|
|
2372
|
+
override.returns(
|
|
2373
|
+
{
|
|
2374
|
+
channel_id: String,
|
|
2375
|
+
connection_id: String,
|
|
2376
|
+
outcomes:
|
|
2377
|
+
T::Array[
|
|
2378
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2379
|
+
],
|
|
2380
|
+
channel_name: T.nilable(String),
|
|
2381
|
+
template: T.nilable(String)
|
|
2382
|
+
}
|
|
2383
|
+
)
|
|
2384
|
+
end
|
|
2385
|
+
def to_hash
|
|
2386
|
+
end
|
|
2387
|
+
|
|
2388
|
+
module Outcome
|
|
2389
|
+
extend Revox::Internal::Type::Enum
|
|
2390
|
+
|
|
2391
|
+
TaggedSymbol =
|
|
2392
|
+
T.type_alias do
|
|
2393
|
+
T.all(
|
|
2394
|
+
Symbol,
|
|
2395
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome
|
|
2396
|
+
)
|
|
2397
|
+
end
|
|
2398
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2399
|
+
|
|
2400
|
+
NOT_INTERESTED =
|
|
2401
|
+
T.let(
|
|
2402
|
+
:not_interested,
|
|
2403
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2404
|
+
)
|
|
2405
|
+
INTERESTED =
|
|
2406
|
+
T.let(
|
|
2407
|
+
:interested,
|
|
2408
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2409
|
+
)
|
|
2410
|
+
COMPLETED =
|
|
2411
|
+
T.let(
|
|
2412
|
+
:completed,
|
|
2413
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2414
|
+
)
|
|
2415
|
+
REQUESTED_CALLBACK_LATER =
|
|
2416
|
+
T.let(
|
|
2417
|
+
:requested_callback_later,
|
|
2418
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2419
|
+
)
|
|
2420
|
+
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
2421
|
+
T.let(
|
|
2422
|
+
:requested_callback_new_number,
|
|
2423
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2424
|
+
)
|
|
2425
|
+
DO_NOT_CONTACT =
|
|
2426
|
+
T.let(
|
|
2427
|
+
:do_not_contact,
|
|
2428
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2429
|
+
)
|
|
2430
|
+
AI_AVERSE =
|
|
2431
|
+
T.let(
|
|
2432
|
+
:ai_averse,
|
|
2433
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2434
|
+
)
|
|
2435
|
+
NONE =
|
|
2436
|
+
T.let(
|
|
2437
|
+
:none,
|
|
2438
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2439
|
+
)
|
|
2440
|
+
|
|
2441
|
+
sig do
|
|
2442
|
+
override.returns(
|
|
2443
|
+
T::Array[
|
|
2444
|
+
Revox::Models::AssistantCloneResponse::Assistant::Slack::Outcome::TaggedSymbol
|
|
2445
|
+
]
|
|
2446
|
+
)
|
|
2447
|
+
end
|
|
2448
|
+
def self.values
|
|
2449
|
+
end
|
|
2450
|
+
end
|
|
2451
|
+
end
|
|
2452
|
+
|
|
2453
|
+
class StructuredOutputConfig < Revox::Internal::Type::BaseModel
|
|
2454
|
+
OrHash =
|
|
2455
|
+
T.type_alias do
|
|
2456
|
+
T.any(
|
|
2457
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig,
|
|
2458
|
+
Revox::Internal::AnyHash
|
|
2459
|
+
)
|
|
2460
|
+
end
|
|
2461
|
+
|
|
2462
|
+
sig { returns(String) }
|
|
2463
|
+
attr_accessor :name
|
|
2464
|
+
|
|
2465
|
+
sig { returns(T::Boolean) }
|
|
2466
|
+
attr_accessor :required
|
|
2467
|
+
|
|
2468
|
+
sig do
|
|
2469
|
+
returns(
|
|
2470
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
|
|
2471
|
+
)
|
|
2472
|
+
end
|
|
2473
|
+
attr_accessor :type
|
|
2474
|
+
|
|
2475
|
+
sig { returns(T.nilable(String)) }
|
|
2476
|
+
attr_reader :description
|
|
2477
|
+
|
|
2478
|
+
sig { params(description: String).void }
|
|
2479
|
+
attr_writer :description
|
|
2480
|
+
|
|
2481
|
+
sig { returns(T.nilable(T::Array[String])) }
|
|
2482
|
+
attr_reader :enum_options
|
|
2483
|
+
|
|
2484
|
+
sig { params(enum_options: T::Array[String]).void }
|
|
2485
|
+
attr_writer :enum_options
|
|
2486
|
+
|
|
2487
|
+
sig do
|
|
2488
|
+
params(
|
|
2489
|
+
name: String,
|
|
2490
|
+
required: T::Boolean,
|
|
2491
|
+
type:
|
|
2492
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::OrSymbol,
|
|
2493
|
+
description: String,
|
|
2494
|
+
enum_options: T::Array[String]
|
|
2495
|
+
).returns(T.attached_class)
|
|
2496
|
+
end
|
|
2497
|
+
def self.new(
|
|
2498
|
+
name:,
|
|
2499
|
+
required:,
|
|
2500
|
+
type:,
|
|
2501
|
+
description: nil,
|
|
2502
|
+
enum_options: nil
|
|
2503
|
+
)
|
|
2504
|
+
end
|
|
2505
|
+
|
|
2506
|
+
sig do
|
|
2507
|
+
override.returns(
|
|
2508
|
+
{
|
|
2509
|
+
name: String,
|
|
2510
|
+
required: T::Boolean,
|
|
2511
|
+
type:
|
|
2512
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol,
|
|
2513
|
+
description: String,
|
|
2514
|
+
enum_options: T::Array[String]
|
|
2515
|
+
}
|
|
2516
|
+
)
|
|
2517
|
+
end
|
|
2518
|
+
def to_hash
|
|
2519
|
+
end
|
|
2520
|
+
|
|
2521
|
+
module Type
|
|
2522
|
+
extend Revox::Internal::Type::Enum
|
|
2523
|
+
|
|
2524
|
+
TaggedSymbol =
|
|
2525
|
+
T.type_alias do
|
|
2526
|
+
T.all(
|
|
2527
|
+
Symbol,
|
|
2528
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type
|
|
2529
|
+
)
|
|
2530
|
+
end
|
|
2531
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2532
|
+
|
|
2533
|
+
STRING =
|
|
2534
|
+
T.let(
|
|
2535
|
+
:string,
|
|
2536
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
|
|
2537
|
+
)
|
|
2538
|
+
NUMBER =
|
|
2539
|
+
T.let(
|
|
2540
|
+
:number,
|
|
2541
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
|
|
2542
|
+
)
|
|
2543
|
+
BOOLEAN =
|
|
2544
|
+
T.let(
|
|
2545
|
+
:boolean,
|
|
2546
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
|
|
2547
|
+
)
|
|
2548
|
+
ENUM =
|
|
2549
|
+
T.let(
|
|
2550
|
+
:enum,
|
|
2551
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
|
|
2552
|
+
)
|
|
2553
|
+
DATE =
|
|
2554
|
+
T.let(
|
|
2555
|
+
:date,
|
|
2556
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
|
|
2557
|
+
)
|
|
2558
|
+
DATETIME =
|
|
2559
|
+
T.let(
|
|
2560
|
+
:datetime,
|
|
2561
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
|
|
2562
|
+
)
|
|
2563
|
+
|
|
2564
|
+
sig do
|
|
2565
|
+
override.returns(
|
|
2566
|
+
T::Array[
|
|
2567
|
+
Revox::Models::AssistantCloneResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
|
|
2568
|
+
]
|
|
2569
|
+
)
|
|
2570
|
+
end
|
|
2571
|
+
def self.values
|
|
2572
|
+
end
|
|
2573
|
+
end
|
|
2574
|
+
end
|
|
2575
|
+
|
|
2576
|
+
class SttContext < Revox::Internal::Type::BaseModel
|
|
2577
|
+
OrHash =
|
|
2578
|
+
T.type_alias do
|
|
2579
|
+
T.any(
|
|
2580
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttContext,
|
|
2581
|
+
Revox::Internal::AnyHash
|
|
2582
|
+
)
|
|
2583
|
+
end
|
|
2584
|
+
|
|
2585
|
+
sig do
|
|
2586
|
+
returns(
|
|
2587
|
+
T::Array[
|
|
2588
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttContext::General
|
|
2589
|
+
]
|
|
2590
|
+
)
|
|
2591
|
+
end
|
|
2592
|
+
attr_accessor :general
|
|
2593
|
+
|
|
2594
|
+
sig { returns(T::Array[String]) }
|
|
2595
|
+
attr_accessor :terms
|
|
2596
|
+
|
|
2597
|
+
# Assistant-level speech-to-text context: structured `general` key/value pairs
|
|
2598
|
+
# plus a list of domain `terms`. Prompt-derived context is merged in without
|
|
2599
|
+
# replacing existing entries.
|
|
2600
|
+
sig do
|
|
2601
|
+
params(
|
|
2602
|
+
general:
|
|
2603
|
+
T::Array[
|
|
2604
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttContext::General::OrHash
|
|
2605
|
+
],
|
|
2606
|
+
terms: T::Array[String]
|
|
2607
|
+
).returns(T.attached_class)
|
|
2608
|
+
end
|
|
2609
|
+
def self.new(general:, terms:)
|
|
2610
|
+
end
|
|
2611
|
+
|
|
2612
|
+
sig do
|
|
2613
|
+
override.returns(
|
|
2614
|
+
{
|
|
2615
|
+
general:
|
|
2616
|
+
T::Array[
|
|
2617
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttContext::General
|
|
2618
|
+
],
|
|
2619
|
+
terms: T::Array[String]
|
|
2620
|
+
}
|
|
2621
|
+
)
|
|
2622
|
+
end
|
|
2623
|
+
def to_hash
|
|
2624
|
+
end
|
|
2625
|
+
|
|
2626
|
+
class General < Revox::Internal::Type::BaseModel
|
|
2627
|
+
OrHash =
|
|
2628
|
+
T.type_alias do
|
|
2629
|
+
T.any(
|
|
2630
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttContext::General,
|
|
2631
|
+
Revox::Internal::AnyHash
|
|
2632
|
+
)
|
|
2633
|
+
end
|
|
2634
|
+
|
|
2635
|
+
sig { returns(String) }
|
|
2636
|
+
attr_accessor :key
|
|
2637
|
+
|
|
2638
|
+
sig { returns(String) }
|
|
2639
|
+
attr_accessor :value
|
|
2640
|
+
|
|
2641
|
+
sig { params(key: String, value: String).returns(T.attached_class) }
|
|
2642
|
+
def self.new(key:, value:)
|
|
2643
|
+
end
|
|
2644
|
+
|
|
2645
|
+
sig { override.returns({ key: String, value: String }) }
|
|
2646
|
+
def to_hash
|
|
2647
|
+
end
|
|
2648
|
+
end
|
|
2649
|
+
end
|
|
2650
|
+
|
|
2651
|
+
# Transcriber (speech-to-text) model used for the assistant.
|
|
2652
|
+
module SttModel
|
|
2653
|
+
extend Revox::Internal::Type::Enum
|
|
2654
|
+
|
|
2655
|
+
TaggedSymbol =
|
|
2656
|
+
T.type_alias do
|
|
2657
|
+
T.all(
|
|
2658
|
+
Symbol,
|
|
2659
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttModel
|
|
2660
|
+
)
|
|
2661
|
+
end
|
|
2662
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2663
|
+
|
|
2664
|
+
STT_RT_V4 =
|
|
2665
|
+
T.let(
|
|
2666
|
+
:"stt-rt-v4",
|
|
2667
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttModel::TaggedSymbol
|
|
2668
|
+
)
|
|
2669
|
+
STT_RT_V5 =
|
|
2670
|
+
T.let(
|
|
2671
|
+
:"stt-rt-v5",
|
|
2672
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttModel::TaggedSymbol
|
|
2673
|
+
)
|
|
2674
|
+
|
|
2675
|
+
sig do
|
|
2676
|
+
override.returns(
|
|
2677
|
+
T::Array[
|
|
2678
|
+
Revox::Models::AssistantCloneResponse::Assistant::SttModel::TaggedSymbol
|
|
2679
|
+
]
|
|
2680
|
+
)
|
|
2681
|
+
end
|
|
2682
|
+
def self.values
|
|
2683
|
+
end
|
|
2684
|
+
end
|
|
2685
|
+
|
|
2686
|
+
# Audio clip to play while the agent is processing a response. One of the built-in
|
|
2687
|
+
# LiveKit audio clips; null disables it.
|
|
2688
|
+
module ThinkingSound
|
|
2689
|
+
extend Revox::Internal::Type::Enum
|
|
2690
|
+
|
|
2691
|
+
TaggedSymbol =
|
|
2692
|
+
T.type_alias do
|
|
2693
|
+
T.all(
|
|
2694
|
+
Symbol,
|
|
2695
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound
|
|
2696
|
+
)
|
|
2697
|
+
end
|
|
2698
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2699
|
+
|
|
2700
|
+
CITY_AMBIENCE_OGG =
|
|
2701
|
+
T.let(
|
|
2702
|
+
:"city-ambience.ogg",
|
|
2703
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
2704
|
+
)
|
|
2705
|
+
FOREST_AMBIENCE_OGG =
|
|
2706
|
+
T.let(
|
|
2707
|
+
:"forest-ambience.ogg",
|
|
2708
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
2709
|
+
)
|
|
2710
|
+
OFFICE_AMBIENCE_OGG =
|
|
2711
|
+
T.let(
|
|
2712
|
+
:"office-ambience.ogg",
|
|
2713
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
2714
|
+
)
|
|
2715
|
+
CROWDED_ROOM_OGG =
|
|
2716
|
+
T.let(
|
|
2717
|
+
:"crowded-room.ogg",
|
|
2718
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
2719
|
+
)
|
|
2720
|
+
KEYBOARD_TYPING_OGG =
|
|
2721
|
+
T.let(
|
|
2722
|
+
:"keyboard-typing.ogg",
|
|
2723
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
2724
|
+
)
|
|
2725
|
+
KEYBOARD_TYPING2_OGG =
|
|
2726
|
+
T.let(
|
|
2727
|
+
:"keyboard-typing2.ogg",
|
|
2728
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
2729
|
+
)
|
|
2730
|
+
HOLD_MUSIC_OGG =
|
|
2731
|
+
T.let(
|
|
2732
|
+
:"hold_music.ogg",
|
|
2733
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
2734
|
+
)
|
|
2735
|
+
|
|
2736
|
+
sig do
|
|
2737
|
+
override.returns(
|
|
2738
|
+
T::Array[
|
|
2739
|
+
Revox::Models::AssistantCloneResponse::Assistant::ThinkingSound::TaggedSymbol
|
|
2740
|
+
]
|
|
2741
|
+
)
|
|
2742
|
+
end
|
|
2743
|
+
def self.values
|
|
2744
|
+
end
|
|
2745
|
+
end
|
|
2746
|
+
|
|
2747
|
+
module Type
|
|
2748
|
+
extend Revox::Internal::Type::Enum
|
|
2749
|
+
|
|
2750
|
+
TaggedSymbol =
|
|
2751
|
+
T.type_alias do
|
|
2752
|
+
T.all(
|
|
2753
|
+
Symbol,
|
|
2754
|
+
Revox::Models::AssistantCloneResponse::Assistant::Type
|
|
2755
|
+
)
|
|
2756
|
+
end
|
|
2757
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2758
|
+
|
|
2759
|
+
STANDALONE =
|
|
2760
|
+
T.let(
|
|
2761
|
+
:standalone,
|
|
2762
|
+
Revox::Models::AssistantCloneResponse::Assistant::Type::TaggedSymbol
|
|
2763
|
+
)
|
|
2764
|
+
MULTI_STEP =
|
|
2765
|
+
T.let(
|
|
2766
|
+
:"multi-step",
|
|
2767
|
+
Revox::Models::AssistantCloneResponse::Assistant::Type::TaggedSymbol
|
|
2768
|
+
)
|
|
2769
|
+
SUB_ASSISTANT =
|
|
2770
|
+
T.let(
|
|
2771
|
+
:"sub-assistant",
|
|
2772
|
+
Revox::Models::AssistantCloneResponse::Assistant::Type::TaggedSymbol
|
|
2773
|
+
)
|
|
2774
|
+
|
|
2775
|
+
sig do
|
|
2776
|
+
override.returns(
|
|
2777
|
+
T::Array[
|
|
2778
|
+
Revox::Models::AssistantCloneResponse::Assistant::Type::TaggedSymbol
|
|
2779
|
+
]
|
|
2780
|
+
)
|
|
2781
|
+
end
|
|
2782
|
+
def self.values
|
|
2783
|
+
end
|
|
2784
|
+
end
|
|
2785
|
+
|
|
2786
|
+
class Voice < Revox::Internal::Type::BaseModel
|
|
2787
|
+
OrHash =
|
|
2788
|
+
T.type_alias do
|
|
2789
|
+
T.any(
|
|
2790
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice,
|
|
2791
|
+
Revox::Internal::AnyHash
|
|
2792
|
+
)
|
|
2793
|
+
end
|
|
2794
|
+
|
|
2795
|
+
# The ID of the voice.
|
|
2796
|
+
sig { returns(String) }
|
|
2797
|
+
attr_accessor :id
|
|
2798
|
+
|
|
2799
|
+
# The provider of the voice.
|
|
2800
|
+
sig do
|
|
2801
|
+
returns(
|
|
2802
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Provider::TaggedSymbol
|
|
2803
|
+
)
|
|
2804
|
+
end
|
|
2805
|
+
attr_accessor :provider
|
|
2806
|
+
|
|
2807
|
+
# Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
|
|
2808
|
+
# for other providers.
|
|
2809
|
+
sig do
|
|
2810
|
+
returns(
|
|
2811
|
+
T.nilable(
|
|
2812
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Model::TaggedSymbol
|
|
2813
|
+
)
|
|
2814
|
+
)
|
|
2815
|
+
end
|
|
2816
|
+
attr_reader :model
|
|
2817
|
+
|
|
2818
|
+
sig do
|
|
2819
|
+
params(
|
|
2820
|
+
model:
|
|
2821
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Model::OrSymbol
|
|
2822
|
+
).void
|
|
2823
|
+
end
|
|
2824
|
+
attr_writer :model
|
|
2825
|
+
|
|
2826
|
+
# The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
|
|
2827
|
+
# 0.7–1.2. Default is 1.0.
|
|
2828
|
+
sig { returns(T.nilable(Float)) }
|
|
2829
|
+
attr_reader :speed
|
|
2830
|
+
|
|
2831
|
+
sig { params(speed: Float).void }
|
|
2832
|
+
attr_writer :speed
|
|
2833
|
+
|
|
2834
|
+
# Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
|
|
2835
|
+
# providers.
|
|
2836
|
+
sig { returns(T.nilable(Float)) }
|
|
2837
|
+
attr_reader :volume
|
|
2838
|
+
|
|
2839
|
+
sig { params(volume: Float).void }
|
|
2840
|
+
attr_writer :volume
|
|
2841
|
+
|
|
2842
|
+
sig do
|
|
2843
|
+
params(
|
|
2844
|
+
id: String,
|
|
2845
|
+
provider:
|
|
2846
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Provider::OrSymbol,
|
|
2847
|
+
model:
|
|
2848
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Model::OrSymbol,
|
|
2849
|
+
speed: Float,
|
|
2850
|
+
volume: Float
|
|
2851
|
+
).returns(T.attached_class)
|
|
2852
|
+
end
|
|
2853
|
+
def self.new(
|
|
2854
|
+
# The ID of the voice.
|
|
2855
|
+
id:,
|
|
2856
|
+
# The provider of the voice.
|
|
2857
|
+
provider:,
|
|
2858
|
+
# Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
|
|
2859
|
+
# for other providers.
|
|
2860
|
+
model: nil,
|
|
2861
|
+
# The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
|
|
2862
|
+
# 0.7–1.2. Default is 1.0.
|
|
2863
|
+
speed: nil,
|
|
2864
|
+
# Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
|
|
2865
|
+
# providers.
|
|
2866
|
+
volume: nil
|
|
2867
|
+
)
|
|
2868
|
+
end
|
|
2869
|
+
|
|
2870
|
+
sig do
|
|
2871
|
+
override.returns(
|
|
2872
|
+
{
|
|
2873
|
+
id: String,
|
|
2874
|
+
provider:
|
|
2875
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Provider::TaggedSymbol,
|
|
2876
|
+
model:
|
|
2877
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Model::TaggedSymbol,
|
|
2878
|
+
speed: Float,
|
|
2879
|
+
volume: Float
|
|
2880
|
+
}
|
|
2881
|
+
)
|
|
2882
|
+
end
|
|
2883
|
+
def to_hash
|
|
2884
|
+
end
|
|
2885
|
+
|
|
2886
|
+
# The provider of the voice.
|
|
2887
|
+
module Provider
|
|
2888
|
+
extend Revox::Internal::Type::Enum
|
|
2889
|
+
|
|
2890
|
+
TaggedSymbol =
|
|
2891
|
+
T.type_alias do
|
|
2892
|
+
T.all(
|
|
2893
|
+
Symbol,
|
|
2894
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Provider
|
|
2895
|
+
)
|
|
2896
|
+
end
|
|
2897
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2898
|
+
|
|
2899
|
+
CARTESIA =
|
|
2900
|
+
T.let(
|
|
2901
|
+
:cartesia,
|
|
2902
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Provider::TaggedSymbol
|
|
2903
|
+
)
|
|
2904
|
+
ELEVENLABS =
|
|
2905
|
+
T.let(
|
|
2906
|
+
:elevenlabs,
|
|
2907
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Provider::TaggedSymbol
|
|
2908
|
+
)
|
|
2909
|
+
|
|
2910
|
+
sig do
|
|
2911
|
+
override.returns(
|
|
2912
|
+
T::Array[
|
|
2913
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Provider::TaggedSymbol
|
|
2914
|
+
]
|
|
2915
|
+
)
|
|
2916
|
+
end
|
|
2917
|
+
def self.values
|
|
2918
|
+
end
|
|
2919
|
+
end
|
|
2920
|
+
|
|
2921
|
+
# Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
|
|
2922
|
+
# for other providers.
|
|
2923
|
+
module Model
|
|
2924
|
+
extend Revox::Internal::Type::Enum
|
|
2925
|
+
|
|
2926
|
+
TaggedSymbol =
|
|
2927
|
+
T.type_alias do
|
|
2928
|
+
T.all(
|
|
2929
|
+
Symbol,
|
|
2930
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Model
|
|
2931
|
+
)
|
|
2932
|
+
end
|
|
2933
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2934
|
+
|
|
2935
|
+
SONIC_3 =
|
|
2936
|
+
T.let(
|
|
2937
|
+
:"sonic-3",
|
|
2938
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Model::TaggedSymbol
|
|
2939
|
+
)
|
|
2940
|
+
SONIC_3_5 =
|
|
2941
|
+
T.let(
|
|
2942
|
+
:"sonic-3.5",
|
|
2943
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Model::TaggedSymbol
|
|
2944
|
+
)
|
|
2945
|
+
|
|
2946
|
+
sig do
|
|
2947
|
+
override.returns(
|
|
2948
|
+
T::Array[
|
|
2949
|
+
Revox::Models::AssistantCloneResponse::Assistant::Voice::Model::TaggedSymbol
|
|
2950
|
+
]
|
|
2951
|
+
)
|
|
2952
|
+
end
|
|
2953
|
+
def self.values
|
|
2954
|
+
end
|
|
2955
|
+
end
|
|
2956
|
+
end
|
|
2957
|
+
|
|
2958
|
+
class Zoho < Revox::Internal::Type::BaseModel
|
|
2959
|
+
OrHash =
|
|
2960
|
+
T.type_alias do
|
|
2961
|
+
T.any(
|
|
2962
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho,
|
|
2963
|
+
Revox::Internal::AnyHash
|
|
2964
|
+
)
|
|
2965
|
+
end
|
|
2966
|
+
|
|
2967
|
+
# The Nango connection ID linking the org's Zoho CRM account to Revox.
|
|
2968
|
+
sig { returns(String) }
|
|
2969
|
+
attr_accessor :connection_id
|
|
2970
|
+
|
|
2971
|
+
# Maps extracted call fields (structured_output / prompt variables) onto Zoho
|
|
2972
|
+
# field API names on the upserted record.
|
|
2973
|
+
sig do
|
|
2974
|
+
returns(
|
|
2975
|
+
T::Array[
|
|
2976
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::FieldMapping
|
|
2977
|
+
]
|
|
2978
|
+
)
|
|
2979
|
+
end
|
|
2980
|
+
attr_accessor :field_mapping
|
|
2981
|
+
|
|
2982
|
+
# When true, also log the call as a record in Zoho's Calls module (related to the
|
|
2983
|
+
# upserted prospect via Who_Id).
|
|
2984
|
+
sig { returns(T::Boolean) }
|
|
2985
|
+
attr_accessor :log_call_activity
|
|
2986
|
+
|
|
2987
|
+
# Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
|
|
2988
|
+
sig { returns(String) }
|
|
2989
|
+
attr_accessor :module_
|
|
2990
|
+
|
|
2991
|
+
# Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
|
|
2992
|
+
# 'none' to push when outcome is null.
|
|
2993
|
+
sig do
|
|
2994
|
+
returns(
|
|
2995
|
+
T::Array[
|
|
2996
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
2997
|
+
]
|
|
2998
|
+
)
|
|
2999
|
+
end
|
|
3000
|
+
attr_accessor :outcomes
|
|
3001
|
+
|
|
3002
|
+
# Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
3003
|
+
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
|
|
3004
|
+
# prompt_variables and structured_output keys. When null/empty a default note
|
|
3005
|
+
# (outcome + summary + auto-listed extracted fields) is used.
|
|
3006
|
+
sig { returns(T.nilable(String)) }
|
|
3007
|
+
attr_accessor :template
|
|
3008
|
+
|
|
3009
|
+
sig do
|
|
3010
|
+
params(
|
|
3011
|
+
connection_id: String,
|
|
3012
|
+
field_mapping:
|
|
3013
|
+
T::Array[
|
|
3014
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::FieldMapping::OrHash
|
|
3015
|
+
],
|
|
3016
|
+
log_call_activity: T::Boolean,
|
|
3017
|
+
module_: String,
|
|
3018
|
+
outcomes:
|
|
3019
|
+
T::Array[
|
|
3020
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::OrSymbol
|
|
3021
|
+
],
|
|
3022
|
+
template: T.nilable(String)
|
|
3023
|
+
).returns(T.attached_class)
|
|
3024
|
+
end
|
|
3025
|
+
def self.new(
|
|
3026
|
+
# The Nango connection ID linking the org's Zoho CRM account to Revox.
|
|
3027
|
+
connection_id:,
|
|
3028
|
+
# Maps extracted call fields (structured_output / prompt variables) onto Zoho
|
|
3029
|
+
# field API names on the upserted record.
|
|
3030
|
+
field_mapping:,
|
|
3031
|
+
# When true, also log the call as a record in Zoho's Calls module (related to the
|
|
3032
|
+
# upserted prospect via Who_Id).
|
|
3033
|
+
log_call_activity:,
|
|
3034
|
+
# Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
|
|
3035
|
+
module_:,
|
|
3036
|
+
# Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
|
|
3037
|
+
# 'none' to push when outcome is null.
|
|
3038
|
+
outcomes:,
|
|
3039
|
+
# Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
3040
|
+
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
|
|
3041
|
+
# prompt_variables and structured_output keys. When null/empty a default note
|
|
3042
|
+
# (outcome + summary + auto-listed extracted fields) is used.
|
|
3043
|
+
template: nil
|
|
3044
|
+
)
|
|
3045
|
+
end
|
|
3046
|
+
|
|
3047
|
+
sig do
|
|
3048
|
+
override.returns(
|
|
3049
|
+
{
|
|
3050
|
+
connection_id: String,
|
|
3051
|
+
field_mapping:
|
|
3052
|
+
T::Array[
|
|
3053
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::FieldMapping
|
|
3054
|
+
],
|
|
3055
|
+
log_call_activity: T::Boolean,
|
|
3056
|
+
module_: String,
|
|
3057
|
+
outcomes:
|
|
3058
|
+
T::Array[
|
|
3059
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3060
|
+
],
|
|
3061
|
+
template: T.nilable(String)
|
|
3062
|
+
}
|
|
3063
|
+
)
|
|
3064
|
+
end
|
|
3065
|
+
def to_hash
|
|
3066
|
+
end
|
|
3067
|
+
|
|
3068
|
+
class FieldMapping < Revox::Internal::Type::BaseModel
|
|
3069
|
+
OrHash =
|
|
3070
|
+
T.type_alias do
|
|
3071
|
+
T.any(
|
|
3072
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::FieldMapping,
|
|
3073
|
+
Revox::Internal::AnyHash
|
|
3074
|
+
)
|
|
3075
|
+
end
|
|
3076
|
+
|
|
3077
|
+
# Source key to read from the call: a structured_output field name, falling back
|
|
3078
|
+
# to a prompt variable of the same name.
|
|
3079
|
+
sig { returns(String) }
|
|
3080
|
+
attr_accessor :source
|
|
3081
|
+
|
|
3082
|
+
# Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
|
|
3083
|
+
# or a custom 'Budget\_\_c').
|
|
3084
|
+
sig { returns(String) }
|
|
3085
|
+
attr_accessor :zoho_field
|
|
3086
|
+
|
|
3087
|
+
sig do
|
|
3088
|
+
params(source: String, zoho_field: String).returns(
|
|
3089
|
+
T.attached_class
|
|
3090
|
+
)
|
|
3091
|
+
end
|
|
3092
|
+
def self.new(
|
|
3093
|
+
# Source key to read from the call: a structured_output field name, falling back
|
|
3094
|
+
# to a prompt variable of the same name.
|
|
3095
|
+
source:,
|
|
3096
|
+
# Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
|
|
3097
|
+
# or a custom 'Budget\_\_c').
|
|
3098
|
+
zoho_field:
|
|
3099
|
+
)
|
|
3100
|
+
end
|
|
3101
|
+
|
|
3102
|
+
sig { override.returns({ source: String, zoho_field: String }) }
|
|
3103
|
+
def to_hash
|
|
3104
|
+
end
|
|
3105
|
+
end
|
|
3106
|
+
|
|
3107
|
+
module Outcome
|
|
3108
|
+
extend Revox::Internal::Type::Enum
|
|
3109
|
+
|
|
3110
|
+
TaggedSymbol =
|
|
3111
|
+
T.type_alias do
|
|
3112
|
+
T.all(
|
|
3113
|
+
Symbol,
|
|
3114
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome
|
|
3115
|
+
)
|
|
3116
|
+
end
|
|
3117
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
3118
|
+
|
|
3119
|
+
NOT_INTERESTED =
|
|
3120
|
+
T.let(
|
|
3121
|
+
:not_interested,
|
|
3122
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3123
|
+
)
|
|
3124
|
+
INTERESTED =
|
|
3125
|
+
T.let(
|
|
3126
|
+
:interested,
|
|
3127
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3128
|
+
)
|
|
3129
|
+
COMPLETED =
|
|
3130
|
+
T.let(
|
|
3131
|
+
:completed,
|
|
3132
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3133
|
+
)
|
|
3134
|
+
REQUESTED_CALLBACK_LATER =
|
|
3135
|
+
T.let(
|
|
3136
|
+
:requested_callback_later,
|
|
3137
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3138
|
+
)
|
|
3139
|
+
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
3140
|
+
T.let(
|
|
3141
|
+
:requested_callback_new_number,
|
|
3142
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3143
|
+
)
|
|
3144
|
+
DO_NOT_CONTACT =
|
|
3145
|
+
T.let(
|
|
3146
|
+
:do_not_contact,
|
|
3147
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3148
|
+
)
|
|
3149
|
+
AI_AVERSE =
|
|
3150
|
+
T.let(
|
|
3151
|
+
:ai_averse,
|
|
3152
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3153
|
+
)
|
|
3154
|
+
NONE =
|
|
3155
|
+
T.let(
|
|
3156
|
+
:none,
|
|
3157
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3158
|
+
)
|
|
3159
|
+
|
|
3160
|
+
sig do
|
|
3161
|
+
override.returns(
|
|
3162
|
+
T::Array[
|
|
3163
|
+
Revox::Models::AssistantCloneResponse::Assistant::Zoho::Outcome::TaggedSymbol
|
|
3164
|
+
]
|
|
3165
|
+
)
|
|
3166
|
+
end
|
|
3167
|
+
def self.values
|
|
3168
|
+
end
|
|
3169
|
+
end
|
|
3170
|
+
end
|
|
3171
|
+
|
|
3172
|
+
class CreatedBy < Revox::Internal::Type::BaseModel
|
|
3173
|
+
OrHash =
|
|
3174
|
+
T.type_alias do
|
|
3175
|
+
T.any(
|
|
3176
|
+
Revox::Models::AssistantCloneResponse::Assistant::CreatedBy,
|
|
3177
|
+
Revox::Internal::AnyHash
|
|
3178
|
+
)
|
|
3179
|
+
end
|
|
3180
|
+
|
|
3181
|
+
# The database user id of the creator.
|
|
3182
|
+
sig { returns(String) }
|
|
3183
|
+
attr_accessor :id
|
|
3184
|
+
|
|
3185
|
+
sig { returns(String) }
|
|
3186
|
+
attr_accessor :email
|
|
3187
|
+
|
|
3188
|
+
sig { returns(T.nilable(String)) }
|
|
3189
|
+
attr_accessor :first_name
|
|
3190
|
+
|
|
3191
|
+
sig { returns(T.nilable(String)) }
|
|
3192
|
+
attr_accessor :last_name
|
|
3193
|
+
|
|
3194
|
+
# The user who created the assistant.
|
|
3195
|
+
sig do
|
|
3196
|
+
params(
|
|
3197
|
+
id: String,
|
|
3198
|
+
email: String,
|
|
3199
|
+
first_name: T.nilable(String),
|
|
3200
|
+
last_name: T.nilable(String)
|
|
3201
|
+
).returns(T.attached_class)
|
|
3202
|
+
end
|
|
3203
|
+
def self.new(
|
|
3204
|
+
# The database user id of the creator.
|
|
3205
|
+
id:,
|
|
3206
|
+
email:,
|
|
3207
|
+
first_name:,
|
|
3208
|
+
last_name:
|
|
3209
|
+
)
|
|
3210
|
+
end
|
|
3211
|
+
|
|
3212
|
+
sig do
|
|
3213
|
+
override.returns(
|
|
3214
|
+
{
|
|
3215
|
+
id: String,
|
|
3216
|
+
email: String,
|
|
3217
|
+
first_name: T.nilable(String),
|
|
3218
|
+
last_name: T.nilable(String)
|
|
3219
|
+
}
|
|
3220
|
+
)
|
|
3221
|
+
end
|
|
3222
|
+
def to_hash
|
|
3223
|
+
end
|
|
3224
|
+
end
|
|
3225
|
+
|
|
3226
|
+
class FaqItem < Revox::Internal::Type::BaseModel
|
|
3227
|
+
OrHash =
|
|
3228
|
+
T.type_alias do
|
|
3229
|
+
T.any(
|
|
3230
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem,
|
|
3231
|
+
Revox::Internal::AnyHash
|
|
3232
|
+
)
|
|
3233
|
+
end
|
|
3234
|
+
|
|
3235
|
+
sig { returns(String) }
|
|
3236
|
+
attr_accessor :answer
|
|
3237
|
+
|
|
3238
|
+
sig { returns(String) }
|
|
3239
|
+
attr_accessor :question
|
|
3240
|
+
|
|
3241
|
+
sig { returns(T.nilable(String)) }
|
|
3242
|
+
attr_reader :id
|
|
3243
|
+
|
|
3244
|
+
sig { params(id: String).void }
|
|
3245
|
+
attr_writer :id
|
|
3246
|
+
|
|
3247
|
+
sig { returns(T.nilable(T::Boolean)) }
|
|
3248
|
+
attr_reader :needs_human_answer
|
|
3249
|
+
|
|
3250
|
+
sig { params(needs_human_answer: T::Boolean).void }
|
|
3251
|
+
attr_writer :needs_human_answer
|
|
3252
|
+
|
|
3253
|
+
sig do
|
|
3254
|
+
returns(
|
|
3255
|
+
T.nilable(
|
|
3256
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::Source::TaggedSymbol
|
|
3257
|
+
)
|
|
3258
|
+
)
|
|
3259
|
+
end
|
|
3260
|
+
attr_reader :source
|
|
3261
|
+
|
|
3262
|
+
sig do
|
|
3263
|
+
params(
|
|
3264
|
+
source:
|
|
3265
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::Source::OrSymbol
|
|
3266
|
+
).void
|
|
3267
|
+
end
|
|
3268
|
+
attr_writer :source
|
|
3269
|
+
|
|
3270
|
+
sig do
|
|
3271
|
+
params(
|
|
3272
|
+
answer: String,
|
|
3273
|
+
question: String,
|
|
3274
|
+
id: String,
|
|
3275
|
+
needs_human_answer: T::Boolean,
|
|
3276
|
+
source:
|
|
3277
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::Source::OrSymbol
|
|
3278
|
+
).returns(T.attached_class)
|
|
3279
|
+
end
|
|
3280
|
+
def self.new(
|
|
3281
|
+
answer:,
|
|
3282
|
+
question:,
|
|
3283
|
+
id: nil,
|
|
3284
|
+
needs_human_answer: nil,
|
|
3285
|
+
source: nil
|
|
3286
|
+
)
|
|
3287
|
+
end
|
|
3288
|
+
|
|
3289
|
+
sig do
|
|
3290
|
+
override.returns(
|
|
3291
|
+
{
|
|
3292
|
+
answer: String,
|
|
3293
|
+
question: String,
|
|
3294
|
+
id: String,
|
|
3295
|
+
needs_human_answer: T::Boolean,
|
|
3296
|
+
source:
|
|
3297
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::Source::TaggedSymbol
|
|
3298
|
+
}
|
|
3299
|
+
)
|
|
3300
|
+
end
|
|
3301
|
+
def to_hash
|
|
3302
|
+
end
|
|
3303
|
+
|
|
3304
|
+
module Source
|
|
3305
|
+
extend Revox::Internal::Type::Enum
|
|
3306
|
+
|
|
3307
|
+
TaggedSymbol =
|
|
3308
|
+
T.type_alias do
|
|
3309
|
+
T.all(
|
|
3310
|
+
Symbol,
|
|
3311
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::Source
|
|
3312
|
+
)
|
|
3313
|
+
end
|
|
3314
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
3315
|
+
|
|
3316
|
+
HUMAN =
|
|
3317
|
+
T.let(
|
|
3318
|
+
:human,
|
|
3319
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::Source::TaggedSymbol
|
|
3320
|
+
)
|
|
3321
|
+
AI =
|
|
3322
|
+
T.let(
|
|
3323
|
+
:ai,
|
|
3324
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::Source::TaggedSymbol
|
|
3325
|
+
)
|
|
3326
|
+
|
|
3327
|
+
sig do
|
|
3328
|
+
override.returns(
|
|
3329
|
+
T::Array[
|
|
3330
|
+
Revox::Models::AssistantCloneResponse::Assistant::FaqItem::Source::TaggedSymbol
|
|
3331
|
+
]
|
|
3332
|
+
)
|
|
3333
|
+
end
|
|
3334
|
+
def self.values
|
|
3335
|
+
end
|
|
3336
|
+
end
|
|
3337
|
+
end
|
|
3338
|
+
end
|
|
3339
|
+
end
|
|
3340
|
+
end
|
|
3341
|
+
end
|