revox 0.0.2 → 0.2.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 +96 -0
- data/README.md +88 -22
- data/lib/revox/client.rb +19 -1
- data/lib/revox/internal/transport/base_client.rb +5 -0
- data/lib/revox/internal/type/base_model.rb +3 -3
- data/lib/revox/internal/util.rb +53 -7
- data/lib/revox/models/assistant_create_params.rb +1036 -11
- data/lib/revox/models/assistant_create_response.rb +1071 -11
- data/lib/revox/models/assistant_delete_params.rb +7 -1
- data/lib/revox/models/assistant_list_response.rb +1070 -11
- data/lib/revox/models/assistant_retrieve_params.rb +7 -1
- data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
- data/lib/revox/models/assistant_update_params.rb +1043 -11
- data/lib/revox/models/assistant_update_response.rb +1097 -12
- data/lib/revox/models/call_create_params.rb +1063 -11
- data/lib/revox/models/call_create_response.rb +2507 -87
- data/lib/revox/models/call_retrieve_params.rb +7 -1
- data/lib/revox/models/call_retrieve_response.rb +2512 -87
- data/lib/revox/models/campaign_cancel_params.rb +20 -0
- data/lib/revox/models/campaign_cancel_response.rb +16 -0
- data/lib/revox/models/campaign_create_params.rb +239 -0
- data/lib/revox/models/campaign_create_response.rb +2030 -0
- data/lib/revox/models/campaign_delete_params.rb +20 -0
- data/lib/revox/models/campaign_delete_response.rb +16 -0
- data/lib/revox/models/campaign_export_rows_params.rb +20 -0
- data/lib/revox/models/campaign_export_rows_response.rb +22 -0
- data/lib/revox/models/campaign_get_rows_params.rb +20 -0
- data/lib/revox/models/campaign_get_rows_response.rb +3176 -0
- data/lib/revox/models/campaign_list_params.rb +14 -0
- data/lib/revox/models/campaign_list_response.rb +2024 -0
- data/lib/revox/models/campaign_retrieve_params.rb +20 -0
- data/lib/revox/models/campaign_retrieve_response.rb +2032 -0
- data/lib/revox/models/users/me_retrieve_response.rb +13 -1
- data/lib/revox/models/users/me_update_response.rb +13 -1
- data/lib/revox/models/voice_list_response.rb +55 -1
- data/lib/revox/models/voice_preview_params.rb +43 -3
- data/lib/revox/models/voice_retrieve_params.rb +7 -1
- data/lib/revox/models.rb +14 -2
- data/lib/revox/resources/assistants.rb +138 -6
- data/lib/revox/resources/call.rb +10 -27
- data/lib/revox/resources/campaigns.rb +176 -0
- data/lib/revox/resources/voices.rb +17 -7
- data/lib/revox/version.rb +1 -1
- data/lib/revox.rb +15 -2
- data/rbi/revox/client.rbi +3 -0
- data/rbi/revox/internal/util.rbi +28 -0
- data/rbi/revox/models/assistant_create_params.rbi +2135 -102
- data/rbi/revox/models/assistant_create_response.rbi +2454 -199
- data/rbi/revox/models/assistant_delete_params.rbi +11 -5
- data/rbi/revox/models/assistant_list_response.rbi +2448 -195
- data/rbi/revox/models/assistant_retrieve_params.rbi +11 -5
- data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
- data/rbi/revox/models/assistant_update_params.rbi +2139 -100
- data/rbi/revox/models/assistant_update_response.rbi +2504 -198
- data/rbi/revox/models/call_create_params.rbi +2377 -222
- data/rbi/revox/models/call_create_response.rbi +5840 -594
- data/rbi/revox/models/call_retrieve_params.rbi +11 -5
- data/rbi/revox/models/call_retrieve_response.rbi +5872 -618
- data/rbi/revox/models/campaign_cancel_params.rbi +33 -0
- data/rbi/revox/models/campaign_cancel_response.rbi +23 -0
- data/rbi/revox/models/campaign_create_params.rbi +433 -0
- data/rbi/revox/models/campaign_create_response.rbi +4170 -0
- data/rbi/revox/models/campaign_delete_params.rbi +33 -0
- data/rbi/revox/models/campaign_delete_response.rbi +23 -0
- data/rbi/revox/models/campaign_export_rows_params.rbi +33 -0
- data/rbi/revox/models/campaign_export_rows_response.rbi +29 -0
- data/rbi/revox/models/campaign_get_rows_params.rbi +33 -0
- data/rbi/revox/models/campaign_get_rows_response.rbi +6706 -0
- data/rbi/revox/models/campaign_list_params.rbi +27 -0
- data/rbi/revox/models/campaign_list_response.rbi +4156 -0
- data/rbi/revox/models/campaign_retrieve_params.rbi +33 -0
- data/rbi/revox/models/campaign_retrieve_response.rbi +4175 -0
- data/rbi/revox/models/users/me_retrieve_response.rbi +13 -3
- data/rbi/revox/models/users/me_update_response.rbi +13 -3
- data/rbi/revox/models/voice_list_response.rbi +105 -3
- data/rbi/revox/models/voice_preview_params.rbi +60 -2
- data/rbi/revox/models/voice_retrieve_params.rbi +6 -1
- data/rbi/revox/models.rbi +14 -2
- data/rbi/revox/resources/assistants.rbi +301 -6
- data/rbi/revox/resources/call.rbi +10 -19
- data/rbi/revox/resources/campaigns.rbi +121 -0
- data/rbi/revox/resources/voices.rbi +15 -5
- data/sig/revox/client.rbs +2 -0
- data/sig/revox/internal/util.rbs +14 -0
- data/sig/revox/models/assistant_create_params.rbs +841 -4
- data/sig/revox/models/assistant_create_response.rbs +860 -3
- data/sig/revox/models/assistant_delete_params.rbs +8 -3
- data/sig/revox/models/assistant_list_response.rbs +860 -3
- data/sig/revox/models/assistant_retrieve_params.rbs +8 -3
- data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
- data/sig/revox/models/assistant_update_params.rbs +846 -4
- data/sig/revox/models/assistant_update_response.rbs +886 -6
- data/sig/revox/models/call_create_params.rbs +844 -6
- data/sig/revox/models/call_create_response.rbs +2166 -79
- data/sig/revox/models/call_retrieve_params.rbs +9 -3
- data/sig/revox/models/call_retrieve_response.rbs +2166 -79
- data/sig/revox/models/campaign_cancel_params.rbs +20 -0
- data/sig/revox/models/campaign_cancel_response.rbs +13 -0
- data/sig/revox/models/campaign_create_params.rbs +203 -0
- data/sig/revox/models/campaign_create_response.rbs +1694 -0
- data/sig/revox/models/campaign_delete_params.rbs +20 -0
- data/sig/revox/models/campaign_delete_response.rbs +13 -0
- data/sig/revox/models/campaign_export_rows_params.rbs +20 -0
- data/sig/revox/models/campaign_export_rows_response.rbs +15 -0
- data/sig/revox/models/campaign_get_rows_params.rbs +20 -0
- data/sig/revox/models/campaign_get_rows_response.rbs +2688 -0
- data/sig/revox/models/campaign_list_params.rbs +14 -0
- data/sig/revox/models/campaign_list_response.rbs +1694 -0
- data/sig/revox/models/campaign_retrieve_params.rbs +20 -0
- data/sig/revox/models/campaign_retrieve_response.rbs +1694 -0
- data/sig/revox/models/users/me_retrieve_response.rbs +8 -3
- data/sig/revox/models/users/me_update_response.rbs +8 -3
- data/sig/revox/models/voice_list_response.rbs +45 -3
- data/sig/revox/models/voice_preview_params.rbs +35 -1
- data/sig/revox/models/voice_retrieve_params.rbs +5 -1
- data/sig/revox/models.rbs +14 -2
- data/sig/revox/resources/assistants.rbs +54 -0
- data/sig/revox/resources/call.rbs +0 -6
- data/sig/revox/resources/campaigns.rbs +49 -0
- data/sig/revox/resources/voices.rbs +3 -0
- metadata +47 -8
- data/lib/revox/models/call_list_params.rb +0 -29
- data/lib/revox/models/call_list_response.rb +0 -197
- data/rbi/revox/models/call_list_params.rbi +0 -47
- data/rbi/revox/models/call_list_response.rbi +0 -401
- data/sig/revox/models/call_list_params.rbs +0 -28
- data/sig/revox/models/call_list_response.rbs +0 -171
|
@@ -11,8 +11,29 @@ module Revox
|
|
|
11
11
|
T.any(Revox::AssistantUpdateParams, Revox::Internal::AnyHash)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
sig { returns(String) }
|
|
15
|
+
attr_accessor :id
|
|
16
|
+
|
|
17
|
+
# Which call outcomes trigger the after-call SMS. When empty or null, no
|
|
18
|
+
# after-call SMS is sent. E.g. ["interested", "completed", "none"]. Use "none"
|
|
19
|
+
# when outcome is null.
|
|
20
|
+
sig do
|
|
21
|
+
returns(
|
|
22
|
+
T.nilable(
|
|
23
|
+
T::Array[
|
|
24
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::OrSymbol
|
|
25
|
+
]
|
|
26
|
+
)
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
attr_accessor :after_call_sms_outcomes
|
|
30
|
+
|
|
31
|
+
# Prompt / instructions for the after-call SMS. Supports {{variable}}
|
|
32
|
+
# placeholders. When null, no after-call SMS is sent.
|
|
33
|
+
sig { returns(T.nilable(String)) }
|
|
34
|
+
attr_accessor :after_call_sms_prompt
|
|
35
|
+
|
|
36
|
+
# Ambient background sound to play during the call. null/omitted disables it.
|
|
16
37
|
sig do
|
|
17
38
|
returns(
|
|
18
39
|
T.nilable(Revox::AssistantUpdateParams::BackgroundSound::OrSymbol)
|
|
@@ -20,6 +41,13 @@ module Revox
|
|
|
20
41
|
end
|
|
21
42
|
attr_accessor :background_sound
|
|
22
43
|
|
|
44
|
+
# Volume of the ambient background sound (0 = silent, 1 = max).
|
|
45
|
+
sig { returns(T.nilable(Float)) }
|
|
46
|
+
attr_reader :background_sound_volume
|
|
47
|
+
|
|
48
|
+
sig { params(background_sound_volume: Float).void }
|
|
49
|
+
attr_writer :background_sound_volume
|
|
50
|
+
|
|
23
51
|
sig { returns(T.nilable(Revox::AssistantUpdateParams::Calendly)) }
|
|
24
52
|
attr_reader :calendly
|
|
25
53
|
|
|
@@ -43,6 +71,56 @@ module Revox
|
|
|
43
71
|
end
|
|
44
72
|
attr_writer :call_retry_config
|
|
45
73
|
|
|
74
|
+
# Optional Cartesia pronunciation dictionary ID to use for this assistant's calls.
|
|
75
|
+
# Set null to unlink it.
|
|
76
|
+
sig { returns(T.nilable(String)) }
|
|
77
|
+
attr_accessor :cartesia_dictionary_pronunciation_id
|
|
78
|
+
|
|
79
|
+
# Custom API tools the assistant can call during conversations. Each tool defines
|
|
80
|
+
# an HTTP endpoint with variable substitution.
|
|
81
|
+
sig do
|
|
82
|
+
returns(T.nilable(T::Array[Revox::AssistantUpdateParams::CustomTool]))
|
|
83
|
+
end
|
|
84
|
+
attr_accessor :custom_tools
|
|
85
|
+
|
|
86
|
+
# Email address(es) to receive notifications when a call ends with a matching
|
|
87
|
+
# outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
|
|
88
|
+
# bob@y.com").
|
|
89
|
+
sig { returns(T.nilable(String)) }
|
|
90
|
+
attr_accessor :email_notification_address
|
|
91
|
+
|
|
92
|
+
# The language used for the notification email content. One of "en" or "fr".
|
|
93
|
+
# Defaults to "en".
|
|
94
|
+
sig do
|
|
95
|
+
returns(
|
|
96
|
+
T.nilable(
|
|
97
|
+
Revox::AssistantUpdateParams::EmailNotificationLanguage::OrSymbol
|
|
98
|
+
)
|
|
99
|
+
)
|
|
100
|
+
end
|
|
101
|
+
attr_reader :email_notification_language
|
|
102
|
+
|
|
103
|
+
sig do
|
|
104
|
+
params(
|
|
105
|
+
email_notification_language:
|
|
106
|
+
Revox::AssistantUpdateParams::EmailNotificationLanguage::OrSymbol
|
|
107
|
+
).void
|
|
108
|
+
end
|
|
109
|
+
attr_writer :email_notification_language
|
|
110
|
+
|
|
111
|
+
# Which call outcomes trigger an email notification. E.g. ["interested",
|
|
112
|
+
# "completed", "none"]. Use "none" when outcome is null.
|
|
113
|
+
sig do
|
|
114
|
+
returns(
|
|
115
|
+
T.nilable(
|
|
116
|
+
T::Array[
|
|
117
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::OrSymbol
|
|
118
|
+
]
|
|
119
|
+
)
|
|
120
|
+
)
|
|
121
|
+
end
|
|
122
|
+
attr_accessor :email_notification_outcomes
|
|
123
|
+
|
|
46
124
|
# Optional message to say when the agent decides to end the call.
|
|
47
125
|
sig { returns(T.nilable(String)) }
|
|
48
126
|
attr_reader :end_of_call_sentence
|
|
@@ -97,6 +175,21 @@ module Revox
|
|
|
97
175
|
end
|
|
98
176
|
attr_writer :first_sentence_mode
|
|
99
177
|
|
|
178
|
+
# Override the default outbound phone number for calls placed with this assistant.
|
|
179
|
+
# Must be a phone number owned by the organization in E.164 format (e.g.
|
|
180
|
+
# +1234567890). When null, the organization's default phone number is used.
|
|
181
|
+
sig { returns(T.nilable(String)) }
|
|
182
|
+
attr_accessor :from_phone_number
|
|
183
|
+
|
|
184
|
+
# When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
|
|
185
|
+
# trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
|
|
186
|
+
sig do
|
|
187
|
+
returns(
|
|
188
|
+
T.nilable(Revox::AssistantUpdateParams::HumanTransferMode::OrSymbol)
|
|
189
|
+
)
|
|
190
|
+
end
|
|
191
|
+
attr_accessor :human_transfer_mode
|
|
192
|
+
|
|
100
193
|
# Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
|
|
101
194
|
# skip turns to navigate phone menus.
|
|
102
195
|
sig { returns(T.nilable(T::Boolean)) }
|
|
@@ -110,7 +203,9 @@ module Revox
|
|
|
110
203
|
T.nilable(
|
|
111
204
|
T.any(
|
|
112
205
|
Revox::AssistantUpdateParams::LlmModel::UnionMember0,
|
|
113
|
-
Revox::AssistantUpdateParams::LlmModel::UnionMember1
|
|
206
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1,
|
|
207
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2,
|
|
208
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3
|
|
114
209
|
)
|
|
115
210
|
)
|
|
116
211
|
)
|
|
@@ -122,12 +217,19 @@ module Revox
|
|
|
122
217
|
llm_model:
|
|
123
218
|
T.any(
|
|
124
219
|
Revox::AssistantUpdateParams::LlmModel::UnionMember0::OrHash,
|
|
125
|
-
Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash
|
|
220
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash,
|
|
221
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2::OrHash,
|
|
222
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::OrHash
|
|
126
223
|
)
|
|
127
224
|
).void
|
|
128
225
|
end
|
|
129
226
|
attr_writer :llm_model
|
|
130
227
|
|
|
228
|
+
# Public URL of the brand logo shown on the assistant's demo page. Upload a new
|
|
229
|
+
# logo via POST /assistants/:id/logo. Set explicitly to null to clear it.
|
|
230
|
+
sig { returns(T.nilable(String)) }
|
|
231
|
+
attr_accessor :logo_url
|
|
232
|
+
|
|
131
233
|
# The maximum duration of the call in seconds. This is the maximum time the call
|
|
132
234
|
# will be allowed to run.
|
|
133
235
|
sig { returns(T.nilable(Float)) }
|
|
@@ -136,12 +238,29 @@ module Revox
|
|
|
136
238
|
sig { params(max_call_duration_secs: Float).void }
|
|
137
239
|
attr_writer :max_call_duration_secs
|
|
138
240
|
|
|
241
|
+
# Optional message the agent will say, without being interruptible, when the call
|
|
242
|
+
# reaches its max duration. Kept short so it fits inside the farewell buffer. If
|
|
243
|
+
# not set, the call ends silently.
|
|
244
|
+
sig { returns(T.nilable(String)) }
|
|
245
|
+
attr_accessor :max_duration_end_message
|
|
246
|
+
|
|
139
247
|
sig { returns(T.nilable(String)) }
|
|
140
248
|
attr_reader :name
|
|
141
249
|
|
|
142
250
|
sig { params(name: String).void }
|
|
143
251
|
attr_writer :name
|
|
144
252
|
|
|
253
|
+
# Canvas position of this assistant's node in its multi-step flow editor.
|
|
254
|
+
sig { returns(T.nilable(Revox::AssistantUpdateParams::Position)) }
|
|
255
|
+
attr_reader :position
|
|
256
|
+
|
|
257
|
+
sig do
|
|
258
|
+
params(
|
|
259
|
+
position: T.nilable(Revox::AssistantUpdateParams::Position::OrHash)
|
|
260
|
+
).void
|
|
261
|
+
end
|
|
262
|
+
attr_writer :position
|
|
263
|
+
|
|
145
264
|
# The prompt to use for the call. This will be given to the LLM (gpt-4.1)
|
|
146
265
|
sig { returns(T.nilable(String)) }
|
|
147
266
|
attr_reader :prompt
|
|
@@ -149,6 +268,46 @@ module Revox
|
|
|
149
268
|
sig { params(prompt: String).void }
|
|
150
269
|
attr_writer :prompt
|
|
151
270
|
|
|
271
|
+
# Visual prompt constructor data (nodes, edges, positions). Used by the UI to
|
|
272
|
+
# re-open the visual editor. Does not affect call behavior — the flattened prompt
|
|
273
|
+
# field is what the LLM receives.
|
|
274
|
+
sig { returns(T.nilable(Revox::AssistantUpdateParams::PromptFlow)) }
|
|
275
|
+
attr_reader :prompt_flow
|
|
276
|
+
|
|
277
|
+
sig do
|
|
278
|
+
params(
|
|
279
|
+
prompt_flow:
|
|
280
|
+
T.nilable(Revox::AssistantUpdateParams::PromptFlow::OrHash)
|
|
281
|
+
).void
|
|
282
|
+
end
|
|
283
|
+
attr_writer :prompt_flow
|
|
284
|
+
|
|
285
|
+
# Slack notification config. When set, posts a message to the chosen channel after
|
|
286
|
+
# a call ends with one of the configured outcomes.
|
|
287
|
+
sig { returns(T.nilable(Revox::AssistantUpdateParams::Slack)) }
|
|
288
|
+
attr_reader :slack
|
|
289
|
+
|
|
290
|
+
sig do
|
|
291
|
+
params(
|
|
292
|
+
slack: T.nilable(Revox::AssistantUpdateParams::Slack::OrHash)
|
|
293
|
+
).void
|
|
294
|
+
end
|
|
295
|
+
attr_writer :slack
|
|
296
|
+
|
|
297
|
+
# Enable SMS tool during calls. When enabled, the agent can send SMS messages to
|
|
298
|
+
# the user on the call.
|
|
299
|
+
sig { returns(T.nilable(T::Boolean)) }
|
|
300
|
+
attr_reader :sms_enabled
|
|
301
|
+
|
|
302
|
+
sig { params(sms_enabled: T::Boolean).void }
|
|
303
|
+
attr_writer :sms_enabled
|
|
304
|
+
|
|
305
|
+
# Hardcoded SMS template to send during calls. When set, this exact text is sent
|
|
306
|
+
# instead of letting the agent generate the message. Supports {{variable}}
|
|
307
|
+
# placeholders.
|
|
308
|
+
sig { returns(T.nilable(String)) }
|
|
309
|
+
attr_accessor :sms_template
|
|
310
|
+
|
|
152
311
|
# The structured output config to use for the call. This is used to extract the
|
|
153
312
|
# data from the call (like email, name, company name, etc.).
|
|
154
313
|
sig do
|
|
@@ -170,11 +329,77 @@ module Revox
|
|
|
170
329
|
end
|
|
171
330
|
attr_writer :structured_output_config
|
|
172
331
|
|
|
332
|
+
# Custom prompt for structured data extraction. If not provided, a default prompt
|
|
333
|
+
# is used. Available variables: {{transcript}}, {{call_direction}},
|
|
334
|
+
# {{user_phone_number}}, {{agent_phone_number}}.
|
|
335
|
+
sig { returns(T.nilable(String)) }
|
|
336
|
+
attr_accessor :structured_output_prompt
|
|
337
|
+
|
|
338
|
+
# Assistant-level speech-to-text context: structured `general` key/value pairs
|
|
339
|
+
# plus a list of domain `terms`. Prompt-derived context is merged in without
|
|
340
|
+
# replacing existing entries.
|
|
341
|
+
sig { returns(T.nilable(Revox::AssistantUpdateParams::SttContext)) }
|
|
342
|
+
attr_reader :stt_context
|
|
343
|
+
|
|
344
|
+
sig do
|
|
345
|
+
params(
|
|
346
|
+
stt_context:
|
|
347
|
+
T.nilable(Revox::AssistantUpdateParams::SttContext::OrHash)
|
|
348
|
+
).void
|
|
349
|
+
end
|
|
350
|
+
attr_writer :stt_context
|
|
351
|
+
|
|
352
|
+
# Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
|
|
353
|
+
# when omitted.
|
|
354
|
+
sig do
|
|
355
|
+
returns(T.nilable(Revox::AssistantUpdateParams::SttModel::OrSymbol))
|
|
356
|
+
end
|
|
357
|
+
attr_reader :stt_model
|
|
358
|
+
|
|
359
|
+
sig do
|
|
360
|
+
params(stt_model: Revox::AssistantUpdateParams::SttModel::OrSymbol).void
|
|
361
|
+
end
|
|
362
|
+
attr_writer :stt_model
|
|
363
|
+
|
|
364
|
+
# Audio clip to play while the agent is processing a response. One of the built-in
|
|
365
|
+
# LiveKit audio clips; null/omitted disables it.
|
|
366
|
+
sig do
|
|
367
|
+
returns(
|
|
368
|
+
T.nilable(Revox::AssistantUpdateParams::ThinkingSound::OrSymbol)
|
|
369
|
+
)
|
|
370
|
+
end
|
|
371
|
+
attr_accessor :thinking_sound
|
|
372
|
+
|
|
373
|
+
# Probability [0..1] that the thinking sound plays on any given turn; otherwise
|
|
374
|
+
# the agent is silent while thinking.
|
|
375
|
+
sig { returns(T.nilable(Float)) }
|
|
376
|
+
attr_reader :thinking_sound_probability
|
|
377
|
+
|
|
378
|
+
sig { params(thinking_sound_probability: Float).void }
|
|
379
|
+
attr_writer :thinking_sound_probability
|
|
380
|
+
|
|
381
|
+
# Volume of the thinking sound (0 = silent, 1 = max).
|
|
382
|
+
sig { returns(T.nilable(Float)) }
|
|
383
|
+
attr_reader :thinking_sound_volume
|
|
384
|
+
|
|
385
|
+
sig { params(thinking_sound_volume: Float).void }
|
|
386
|
+
attr_writer :thinking_sound_volume
|
|
387
|
+
|
|
173
388
|
# Phone number to transfer calls to when users request to speak to a human agent
|
|
174
389
|
# in E.164 format (e.g. +1234567890).
|
|
175
390
|
sig { returns(T.nilable(String)) }
|
|
176
391
|
attr_accessor :transfer_phone_number
|
|
177
392
|
|
|
393
|
+
# Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
|
|
394
|
+
# orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
|
|
395
|
+
# multi-step flow (hidden from the assistants list). Flow transitions are managed
|
|
396
|
+
# via the /assistants/:id/edges endpoints, not on the assistant itself.
|
|
397
|
+
sig { returns(T.nilable(Revox::AssistantUpdateParams::Type::OrSymbol)) }
|
|
398
|
+
attr_reader :type
|
|
399
|
+
|
|
400
|
+
sig { params(type: Revox::AssistantUpdateParams::Type::OrSymbol).void }
|
|
401
|
+
attr_writer :type
|
|
402
|
+
|
|
178
403
|
# The voice to use for the call. You can get the list of voices using the /voices
|
|
179
404
|
# endpoint
|
|
180
405
|
sig { returns(T.nilable(Revox::AssistantUpdateParams::Voice)) }
|
|
@@ -188,6 +413,17 @@ module Revox
|
|
|
188
413
|
sig { returns(T.nilable(String)) }
|
|
189
414
|
attr_accessor :voicemail_message
|
|
190
415
|
|
|
416
|
+
# SMS message to send when the call reaches voicemail. Supports {{variable}}
|
|
417
|
+
# placeholders. When null, no SMS is sent on voicemail.
|
|
418
|
+
sig { returns(T.nilable(String)) }
|
|
419
|
+
attr_accessor :voicemail_sms_prompt
|
|
420
|
+
|
|
421
|
+
# When using warm transfer: extra instructions for the supervisor handoff summary.
|
|
422
|
+
# If null or empty, the API uses the product default briefing when the call is
|
|
423
|
+
# loaded for the agent.
|
|
424
|
+
sig { returns(T.nilable(String)) }
|
|
425
|
+
attr_accessor :warm_transfer_summary_instructions
|
|
426
|
+
|
|
191
427
|
# The webhook URL to call when the call is completed.
|
|
192
428
|
sig { returns(T.nilable(String)) }
|
|
193
429
|
attr_reader :webhook_url
|
|
@@ -195,47 +431,133 @@ module Revox
|
|
|
195
431
|
sig { params(webhook_url: String).void }
|
|
196
432
|
attr_writer :webhook_url
|
|
197
433
|
|
|
434
|
+
# Zoho CRM integration config. When set, upserts the prospect (keyed on phone)
|
|
435
|
+
# into the chosen module and attaches a Note with the call summary after a call
|
|
436
|
+
# ends with one of the configured outcomes.
|
|
437
|
+
sig { returns(T.nilable(Revox::AssistantUpdateParams::Zoho)) }
|
|
438
|
+
attr_reader :zoho
|
|
439
|
+
|
|
440
|
+
sig do
|
|
441
|
+
params(zoho: T.nilable(Revox::AssistantUpdateParams::Zoho::OrHash)).void
|
|
442
|
+
end
|
|
443
|
+
attr_writer :zoho
|
|
444
|
+
|
|
198
445
|
sig do
|
|
199
446
|
params(
|
|
447
|
+
id: String,
|
|
448
|
+
after_call_sms_outcomes:
|
|
449
|
+
T.nilable(
|
|
450
|
+
T::Array[
|
|
451
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::OrSymbol
|
|
452
|
+
]
|
|
453
|
+
),
|
|
454
|
+
after_call_sms_prompt: T.nilable(String),
|
|
200
455
|
background_sound:
|
|
201
456
|
T.nilable(Revox::AssistantUpdateParams::BackgroundSound::OrSymbol),
|
|
457
|
+
background_sound_volume: Float,
|
|
202
458
|
calendly: T.nilable(Revox::AssistantUpdateParams::Calendly::OrHash),
|
|
203
459
|
call_retry_config:
|
|
204
460
|
Revox::AssistantUpdateParams::CallRetryConfig::OrHash,
|
|
461
|
+
cartesia_dictionary_pronunciation_id: T.nilable(String),
|
|
462
|
+
custom_tools:
|
|
463
|
+
T.nilable(
|
|
464
|
+
T::Array[Revox::AssistantUpdateParams::CustomTool::OrHash]
|
|
465
|
+
),
|
|
466
|
+
email_notification_address: T.nilable(String),
|
|
467
|
+
email_notification_language:
|
|
468
|
+
Revox::AssistantUpdateParams::EmailNotificationLanguage::OrSymbol,
|
|
469
|
+
email_notification_outcomes:
|
|
470
|
+
T.nilable(
|
|
471
|
+
T::Array[
|
|
472
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::OrSymbol
|
|
473
|
+
]
|
|
474
|
+
),
|
|
205
475
|
end_of_call_sentence: String,
|
|
206
476
|
faq_items: T::Array[Revox::AssistantUpdateParams::FaqItem::OrHash],
|
|
207
477
|
first_sentence: String,
|
|
208
478
|
first_sentence_delay_ms: Integer,
|
|
209
479
|
first_sentence_mode:
|
|
210
480
|
Revox::AssistantUpdateParams::FirstSentenceMode::OrSymbol,
|
|
481
|
+
from_phone_number: T.nilable(String),
|
|
482
|
+
human_transfer_mode:
|
|
483
|
+
T.nilable(
|
|
484
|
+
Revox::AssistantUpdateParams::HumanTransferMode::OrSymbol
|
|
485
|
+
),
|
|
211
486
|
ivr_navigation_enabled: T::Boolean,
|
|
212
487
|
llm_model:
|
|
213
488
|
T.any(
|
|
214
489
|
Revox::AssistantUpdateParams::LlmModel::UnionMember0::OrHash,
|
|
215
|
-
Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash
|
|
490
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash,
|
|
491
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2::OrHash,
|
|
492
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::OrHash
|
|
216
493
|
),
|
|
494
|
+
logo_url: T.nilable(String),
|
|
217
495
|
max_call_duration_secs: Float,
|
|
496
|
+
max_duration_end_message: T.nilable(String),
|
|
218
497
|
name: String,
|
|
498
|
+
position: T.nilable(Revox::AssistantUpdateParams::Position::OrHash),
|
|
219
499
|
prompt: String,
|
|
500
|
+
prompt_flow:
|
|
501
|
+
T.nilable(Revox::AssistantUpdateParams::PromptFlow::OrHash),
|
|
502
|
+
slack: T.nilable(Revox::AssistantUpdateParams::Slack::OrHash),
|
|
503
|
+
sms_enabled: T::Boolean,
|
|
504
|
+
sms_template: T.nilable(String),
|
|
220
505
|
structured_output_config:
|
|
221
506
|
T::Array[
|
|
222
507
|
Revox::AssistantUpdateParams::StructuredOutputConfig::OrHash
|
|
223
508
|
],
|
|
509
|
+
structured_output_prompt: T.nilable(String),
|
|
510
|
+
stt_context:
|
|
511
|
+
T.nilable(Revox::AssistantUpdateParams::SttContext::OrHash),
|
|
512
|
+
stt_model: Revox::AssistantUpdateParams::SttModel::OrSymbol,
|
|
513
|
+
thinking_sound:
|
|
514
|
+
T.nilable(Revox::AssistantUpdateParams::ThinkingSound::OrSymbol),
|
|
515
|
+
thinking_sound_probability: Float,
|
|
516
|
+
thinking_sound_volume: Float,
|
|
224
517
|
transfer_phone_number: T.nilable(String),
|
|
518
|
+
type: Revox::AssistantUpdateParams::Type::OrSymbol,
|
|
225
519
|
voice: Revox::AssistantUpdateParams::Voice::OrHash,
|
|
226
520
|
voicemail_message: T.nilable(String),
|
|
521
|
+
voicemail_sms_prompt: T.nilable(String),
|
|
522
|
+
warm_transfer_summary_instructions: T.nilable(String),
|
|
227
523
|
webhook_url: String,
|
|
524
|
+
zoho: T.nilable(Revox::AssistantUpdateParams::Zoho::OrHash),
|
|
228
525
|
request_options: Revox::RequestOptions::OrHash
|
|
229
526
|
).returns(T.attached_class)
|
|
230
527
|
end
|
|
231
528
|
def self.new(
|
|
232
|
-
|
|
233
|
-
#
|
|
529
|
+
id:,
|
|
530
|
+
# Which call outcomes trigger the after-call SMS. When empty or null, no
|
|
531
|
+
# after-call SMS is sent. E.g. ["interested", "completed", "none"]. Use "none"
|
|
532
|
+
# when outcome is null.
|
|
533
|
+
after_call_sms_outcomes: nil,
|
|
534
|
+
# Prompt / instructions for the after-call SMS. Supports {{variable}}
|
|
535
|
+
# placeholders. When null, no after-call SMS is sent.
|
|
536
|
+
after_call_sms_prompt: nil,
|
|
537
|
+
# Ambient background sound to play during the call. null/omitted disables it.
|
|
234
538
|
background_sound: nil,
|
|
539
|
+
# Volume of the ambient background sound (0 = silent, 1 = max).
|
|
540
|
+
background_sound_volume: nil,
|
|
235
541
|
calendly: nil,
|
|
236
542
|
# Configuration for call retry behavior including time windows, delays, and max
|
|
237
543
|
# iterations. If not provided, defaults will be used.
|
|
238
544
|
call_retry_config: nil,
|
|
545
|
+
# Optional Cartesia pronunciation dictionary ID to use for this assistant's calls.
|
|
546
|
+
# Set null to unlink it.
|
|
547
|
+
cartesia_dictionary_pronunciation_id: nil,
|
|
548
|
+
# Custom API tools the assistant can call during conversations. Each tool defines
|
|
549
|
+
# an HTTP endpoint with variable substitution.
|
|
550
|
+
custom_tools: nil,
|
|
551
|
+
# Email address(es) to receive notifications when a call ends with a matching
|
|
552
|
+
# outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
|
|
553
|
+
# bob@y.com").
|
|
554
|
+
email_notification_address: nil,
|
|
555
|
+
# The language used for the notification email content. One of "en" or "fr".
|
|
556
|
+
# Defaults to "en".
|
|
557
|
+
email_notification_language: nil,
|
|
558
|
+
# Which call outcomes trigger an email notification. E.g. ["interested",
|
|
559
|
+
# "completed", "none"]. Use "none" when outcome is null.
|
|
560
|
+
email_notification_outcomes: nil,
|
|
239
561
|
# Optional message to say when the agent decides to end the call.
|
|
240
562
|
end_of_call_sentence: nil,
|
|
241
563
|
# FAQ items to associate with this assistant. When provided, replaces all existing
|
|
@@ -250,30 +572,95 @@ module Revox
|
|
|
250
572
|
# first_sentence will be spoken exactly as provided. "none" means the agent will
|
|
251
573
|
# not speak first and will wait for the user.
|
|
252
574
|
first_sentence_mode: nil,
|
|
575
|
+
# Override the default outbound phone number for calls placed with this assistant.
|
|
576
|
+
# Must be a phone number owned by the organization in E.164 format (e.g.
|
|
577
|
+
# +1234567890). When null, the organization's default phone number is used.
|
|
578
|
+
from_phone_number: nil,
|
|
579
|
+
# When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
|
|
580
|
+
# trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
|
|
581
|
+
human_transfer_mode: nil,
|
|
253
582
|
# Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
|
|
254
583
|
# skip turns to navigate phone menus.
|
|
255
584
|
ivr_navigation_enabled: nil,
|
|
256
585
|
llm_model: nil,
|
|
586
|
+
# Public URL of the brand logo shown on the assistant's demo page. Upload a new
|
|
587
|
+
# logo via POST /assistants/:id/logo. Set explicitly to null to clear it.
|
|
588
|
+
logo_url: nil,
|
|
257
589
|
# The maximum duration of the call in seconds. This is the maximum time the call
|
|
258
590
|
# will be allowed to run.
|
|
259
591
|
max_call_duration_secs: nil,
|
|
592
|
+
# Optional message the agent will say, without being interruptible, when the call
|
|
593
|
+
# reaches its max duration. Kept short so it fits inside the farewell buffer. If
|
|
594
|
+
# not set, the call ends silently.
|
|
595
|
+
max_duration_end_message: nil,
|
|
260
596
|
name: nil,
|
|
597
|
+
# Canvas position of this assistant's node in its multi-step flow editor.
|
|
598
|
+
position: nil,
|
|
261
599
|
# The prompt to use for the call. This will be given to the LLM (gpt-4.1)
|
|
262
600
|
prompt: nil,
|
|
601
|
+
# Visual prompt constructor data (nodes, edges, positions). Used by the UI to
|
|
602
|
+
# re-open the visual editor. Does not affect call behavior — the flattened prompt
|
|
603
|
+
# field is what the LLM receives.
|
|
604
|
+
prompt_flow: nil,
|
|
605
|
+
# Slack notification config. When set, posts a message to the chosen channel after
|
|
606
|
+
# a call ends with one of the configured outcomes.
|
|
607
|
+
slack: nil,
|
|
608
|
+
# Enable SMS tool during calls. When enabled, the agent can send SMS messages to
|
|
609
|
+
# the user on the call.
|
|
610
|
+
sms_enabled: nil,
|
|
611
|
+
# Hardcoded SMS template to send during calls. When set, this exact text is sent
|
|
612
|
+
# instead of letting the agent generate the message. Supports {{variable}}
|
|
613
|
+
# placeholders.
|
|
614
|
+
sms_template: nil,
|
|
263
615
|
# The structured output config to use for the call. This is used to extract the
|
|
264
616
|
# data from the call (like email, name, company name, etc.).
|
|
265
617
|
structured_output_config: nil,
|
|
618
|
+
# Custom prompt for structured data extraction. If not provided, a default prompt
|
|
619
|
+
# is used. Available variables: {{transcript}}, {{call_direction}},
|
|
620
|
+
# {{user_phone_number}}, {{agent_phone_number}}.
|
|
621
|
+
structured_output_prompt: nil,
|
|
622
|
+
# Assistant-level speech-to-text context: structured `general` key/value pairs
|
|
623
|
+
# plus a list of domain `terms`. Prompt-derived context is merged in without
|
|
624
|
+
# replacing existing entries.
|
|
625
|
+
stt_context: nil,
|
|
626
|
+
# Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
|
|
627
|
+
# when omitted.
|
|
628
|
+
stt_model: nil,
|
|
629
|
+
# Audio clip to play while the agent is processing a response. One of the built-in
|
|
630
|
+
# LiveKit audio clips; null/omitted disables it.
|
|
631
|
+
thinking_sound: nil,
|
|
632
|
+
# Probability [0..1] that the thinking sound plays on any given turn; otherwise
|
|
633
|
+
# the agent is silent while thinking.
|
|
634
|
+
thinking_sound_probability: nil,
|
|
635
|
+
# Volume of the thinking sound (0 = silent, 1 = max).
|
|
636
|
+
thinking_sound_volume: nil,
|
|
266
637
|
# Phone number to transfer calls to when users request to speak to a human agent
|
|
267
638
|
# in E.164 format (e.g. +1234567890).
|
|
268
639
|
transfer_phone_number: nil,
|
|
640
|
+
# Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
|
|
641
|
+
# orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
|
|
642
|
+
# multi-step flow (hidden from the assistants list). Flow transitions are managed
|
|
643
|
+
# via the /assistants/:id/edges endpoints, not on the assistant itself.
|
|
644
|
+
type: nil,
|
|
269
645
|
# The voice to use for the call. You can get the list of voices using the /voices
|
|
270
646
|
# endpoint
|
|
271
647
|
voice: nil,
|
|
272
648
|
# If set, when voicemail is detected the agent will speak this message then hang
|
|
273
649
|
# up; if null, hang up immediately.
|
|
274
650
|
voicemail_message: nil,
|
|
651
|
+
# SMS message to send when the call reaches voicemail. Supports {{variable}}
|
|
652
|
+
# placeholders. When null, no SMS is sent on voicemail.
|
|
653
|
+
voicemail_sms_prompt: nil,
|
|
654
|
+
# When using warm transfer: extra instructions for the supervisor handoff summary.
|
|
655
|
+
# If null or empty, the API uses the product default briefing when the call is
|
|
656
|
+
# loaded for the agent.
|
|
657
|
+
warm_transfer_summary_instructions: nil,
|
|
275
658
|
# The webhook URL to call when the call is completed.
|
|
276
659
|
webhook_url: nil,
|
|
660
|
+
# Zoho CRM integration config. When set, upserts the prospect (keyed on phone)
|
|
661
|
+
# into the chosen module and attaches a Note with the call summary after a call
|
|
662
|
+
# ends with one of the configured outcomes.
|
|
663
|
+
zoho: nil,
|
|
277
664
|
request_options: {}
|
|
278
665
|
)
|
|
279
666
|
end
|
|
@@ -281,33 +668,79 @@ module Revox
|
|
|
281
668
|
sig do
|
|
282
669
|
override.returns(
|
|
283
670
|
{
|
|
671
|
+
id: String,
|
|
672
|
+
after_call_sms_outcomes:
|
|
673
|
+
T.nilable(
|
|
674
|
+
T::Array[
|
|
675
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::OrSymbol
|
|
676
|
+
]
|
|
677
|
+
),
|
|
678
|
+
after_call_sms_prompt: T.nilable(String),
|
|
284
679
|
background_sound:
|
|
285
680
|
T.nilable(
|
|
286
681
|
Revox::AssistantUpdateParams::BackgroundSound::OrSymbol
|
|
287
682
|
),
|
|
683
|
+
background_sound_volume: Float,
|
|
288
684
|
calendly: T.nilable(Revox::AssistantUpdateParams::Calendly),
|
|
289
685
|
call_retry_config: Revox::AssistantUpdateParams::CallRetryConfig,
|
|
686
|
+
cartesia_dictionary_pronunciation_id: T.nilable(String),
|
|
687
|
+
custom_tools:
|
|
688
|
+
T.nilable(T::Array[Revox::AssistantUpdateParams::CustomTool]),
|
|
689
|
+
email_notification_address: T.nilable(String),
|
|
690
|
+
email_notification_language:
|
|
691
|
+
Revox::AssistantUpdateParams::EmailNotificationLanguage::OrSymbol,
|
|
692
|
+
email_notification_outcomes:
|
|
693
|
+
T.nilable(
|
|
694
|
+
T::Array[
|
|
695
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::OrSymbol
|
|
696
|
+
]
|
|
697
|
+
),
|
|
290
698
|
end_of_call_sentence: String,
|
|
291
699
|
faq_items: T::Array[Revox::AssistantUpdateParams::FaqItem],
|
|
292
700
|
first_sentence: String,
|
|
293
701
|
first_sentence_delay_ms: Integer,
|
|
294
702
|
first_sentence_mode:
|
|
295
703
|
Revox::AssistantUpdateParams::FirstSentenceMode::OrSymbol,
|
|
704
|
+
from_phone_number: T.nilable(String),
|
|
705
|
+
human_transfer_mode:
|
|
706
|
+
T.nilable(
|
|
707
|
+
Revox::AssistantUpdateParams::HumanTransferMode::OrSymbol
|
|
708
|
+
),
|
|
296
709
|
ivr_navigation_enabled: T::Boolean,
|
|
297
710
|
llm_model:
|
|
298
711
|
T.any(
|
|
299
712
|
Revox::AssistantUpdateParams::LlmModel::UnionMember0,
|
|
300
|
-
Revox::AssistantUpdateParams::LlmModel::UnionMember1
|
|
713
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1,
|
|
714
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2,
|
|
715
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3
|
|
301
716
|
),
|
|
717
|
+
logo_url: T.nilable(String),
|
|
302
718
|
max_call_duration_secs: Float,
|
|
719
|
+
max_duration_end_message: T.nilable(String),
|
|
303
720
|
name: String,
|
|
721
|
+
position: T.nilable(Revox::AssistantUpdateParams::Position),
|
|
304
722
|
prompt: String,
|
|
723
|
+
prompt_flow: T.nilable(Revox::AssistantUpdateParams::PromptFlow),
|
|
724
|
+
slack: T.nilable(Revox::AssistantUpdateParams::Slack),
|
|
725
|
+
sms_enabled: T::Boolean,
|
|
726
|
+
sms_template: T.nilable(String),
|
|
305
727
|
structured_output_config:
|
|
306
728
|
T::Array[Revox::AssistantUpdateParams::StructuredOutputConfig],
|
|
729
|
+
structured_output_prompt: T.nilable(String),
|
|
730
|
+
stt_context: T.nilable(Revox::AssistantUpdateParams::SttContext),
|
|
731
|
+
stt_model: Revox::AssistantUpdateParams::SttModel::OrSymbol,
|
|
732
|
+
thinking_sound:
|
|
733
|
+
T.nilable(Revox::AssistantUpdateParams::ThinkingSound::OrSymbol),
|
|
734
|
+
thinking_sound_probability: Float,
|
|
735
|
+
thinking_sound_volume: Float,
|
|
307
736
|
transfer_phone_number: T.nilable(String),
|
|
737
|
+
type: Revox::AssistantUpdateParams::Type::OrSymbol,
|
|
308
738
|
voice: Revox::AssistantUpdateParams::Voice,
|
|
309
739
|
voicemail_message: T.nilable(String),
|
|
740
|
+
voicemail_sms_prompt: T.nilable(String),
|
|
741
|
+
warm_transfer_summary_instructions: T.nilable(String),
|
|
310
742
|
webhook_url: String,
|
|
743
|
+
zoho: T.nilable(Revox::AssistantUpdateParams::Zoho),
|
|
311
744
|
request_options: Revox::RequestOptions
|
|
312
745
|
}
|
|
313
746
|
)
|
|
@@ -315,8 +748,68 @@ module Revox
|
|
|
315
748
|
def to_hash
|
|
316
749
|
end
|
|
317
750
|
|
|
318
|
-
|
|
319
|
-
|
|
751
|
+
module AfterCallSMSOutcome
|
|
752
|
+
extend Revox::Internal::Type::Enum
|
|
753
|
+
|
|
754
|
+
TaggedSymbol =
|
|
755
|
+
T.type_alias do
|
|
756
|
+
T.all(Symbol, Revox::AssistantUpdateParams::AfterCallSMSOutcome)
|
|
757
|
+
end
|
|
758
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
759
|
+
|
|
760
|
+
NOT_INTERESTED =
|
|
761
|
+
T.let(
|
|
762
|
+
:not_interested,
|
|
763
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
|
|
764
|
+
)
|
|
765
|
+
INTERESTED =
|
|
766
|
+
T.let(
|
|
767
|
+
:interested,
|
|
768
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
|
|
769
|
+
)
|
|
770
|
+
COMPLETED =
|
|
771
|
+
T.let(
|
|
772
|
+
:completed,
|
|
773
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
|
|
774
|
+
)
|
|
775
|
+
REQUESTED_CALLBACK_LATER =
|
|
776
|
+
T.let(
|
|
777
|
+
:requested_callback_later,
|
|
778
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
|
|
779
|
+
)
|
|
780
|
+
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
781
|
+
T.let(
|
|
782
|
+
:requested_callback_new_number,
|
|
783
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
|
|
784
|
+
)
|
|
785
|
+
DO_NOT_CONTACT =
|
|
786
|
+
T.let(
|
|
787
|
+
:do_not_contact,
|
|
788
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
|
|
789
|
+
)
|
|
790
|
+
AI_AVERSE =
|
|
791
|
+
T.let(
|
|
792
|
+
:ai_averse,
|
|
793
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
|
|
794
|
+
)
|
|
795
|
+
NONE =
|
|
796
|
+
T.let(
|
|
797
|
+
:none,
|
|
798
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
|
|
799
|
+
)
|
|
800
|
+
|
|
801
|
+
sig do
|
|
802
|
+
override.returns(
|
|
803
|
+
T::Array[
|
|
804
|
+
Revox::AssistantUpdateParams::AfterCallSMSOutcome::TaggedSymbol
|
|
805
|
+
]
|
|
806
|
+
)
|
|
807
|
+
end
|
|
808
|
+
def self.values
|
|
809
|
+
end
|
|
810
|
+
end
|
|
811
|
+
|
|
812
|
+
# Ambient background sound to play during the call. null/omitted disables it.
|
|
320
813
|
module BackgroundSound
|
|
321
814
|
extend Revox::Internal::Type::Enum
|
|
322
815
|
|
|
@@ -391,6 +884,24 @@ module Revox
|
|
|
391
884
|
)
|
|
392
885
|
end
|
|
393
886
|
|
|
887
|
+
# Days of the week when calls are allowed, in the recipient's timezone. Default:
|
|
888
|
+
# Monday through Friday.
|
|
889
|
+
sig do
|
|
890
|
+
returns(
|
|
891
|
+
T::Array[
|
|
892
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::OrSymbol
|
|
893
|
+
]
|
|
894
|
+
)
|
|
895
|
+
end
|
|
896
|
+
attr_accessor :allowed_days
|
|
897
|
+
|
|
898
|
+
# If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
|
|
899
|
+
# retry_delay_seconds) when attempt #1 didn't reach a human.
|
|
900
|
+
# Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
|
|
901
|
+
# Default: false.
|
|
902
|
+
sig { returns(T::Boolean) }
|
|
903
|
+
attr_accessor :call_twice_in_a_row
|
|
904
|
+
|
|
394
905
|
sig do
|
|
395
906
|
returns(
|
|
396
907
|
T::Array[
|
|
@@ -414,6 +925,11 @@ module Revox
|
|
|
414
925
|
# iterations. If not provided, defaults will be used.
|
|
415
926
|
sig do
|
|
416
927
|
params(
|
|
928
|
+
allowed_days:
|
|
929
|
+
T::Array[
|
|
930
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::OrSymbol
|
|
931
|
+
],
|
|
932
|
+
call_twice_in_a_row: T::Boolean,
|
|
417
933
|
calling_windows:
|
|
418
934
|
T::Array[
|
|
419
935
|
Revox::AssistantUpdateParams::CallRetryConfig::CallingWindow::OrHash
|
|
@@ -423,6 +939,14 @@ module Revox
|
|
|
423
939
|
).returns(T.attached_class)
|
|
424
940
|
end
|
|
425
941
|
def self.new(
|
|
942
|
+
# Days of the week when calls are allowed, in the recipient's timezone. Default:
|
|
943
|
+
# Monday through Friday.
|
|
944
|
+
allowed_days:,
|
|
945
|
+
# If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
|
|
946
|
+
# retry_delay_seconds) when attempt #1 didn't reach a human.
|
|
947
|
+
# Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
|
|
948
|
+
# Default: false.
|
|
949
|
+
call_twice_in_a_row:,
|
|
426
950
|
calling_windows:,
|
|
427
951
|
# Maximum number of call retry attempts. Default: 3.
|
|
428
952
|
max_retry_attempts:,
|
|
@@ -436,6 +960,11 @@ module Revox
|
|
|
436
960
|
sig do
|
|
437
961
|
override.returns(
|
|
438
962
|
{
|
|
963
|
+
allowed_days:
|
|
964
|
+
T::Array[
|
|
965
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::OrSymbol
|
|
966
|
+
],
|
|
967
|
+
call_twice_in_a_row: T::Boolean,
|
|
439
968
|
calling_windows:
|
|
440
969
|
T::Array[
|
|
441
970
|
Revox::AssistantUpdateParams::CallRetryConfig::CallingWindow
|
|
@@ -448,6 +977,65 @@ module Revox
|
|
|
448
977
|
def to_hash
|
|
449
978
|
end
|
|
450
979
|
|
|
980
|
+
module AllowedDay
|
|
981
|
+
extend Revox::Internal::Type::Enum
|
|
982
|
+
|
|
983
|
+
TaggedSymbol =
|
|
984
|
+
T.type_alias do
|
|
985
|
+
T.all(
|
|
986
|
+
Symbol,
|
|
987
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay
|
|
988
|
+
)
|
|
989
|
+
end
|
|
990
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
991
|
+
|
|
992
|
+
MONDAY =
|
|
993
|
+
T.let(
|
|
994
|
+
:monday,
|
|
995
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
996
|
+
)
|
|
997
|
+
TUESDAY =
|
|
998
|
+
T.let(
|
|
999
|
+
:tuesday,
|
|
1000
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1001
|
+
)
|
|
1002
|
+
WEDNESDAY =
|
|
1003
|
+
T.let(
|
|
1004
|
+
:wednesday,
|
|
1005
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1006
|
+
)
|
|
1007
|
+
THURSDAY =
|
|
1008
|
+
T.let(
|
|
1009
|
+
:thursday,
|
|
1010
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1011
|
+
)
|
|
1012
|
+
FRIDAY =
|
|
1013
|
+
T.let(
|
|
1014
|
+
:friday,
|
|
1015
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1016
|
+
)
|
|
1017
|
+
SATURDAY =
|
|
1018
|
+
T.let(
|
|
1019
|
+
:saturday,
|
|
1020
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1021
|
+
)
|
|
1022
|
+
SUNDAY =
|
|
1023
|
+
T.let(
|
|
1024
|
+
:sunday,
|
|
1025
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1026
|
+
)
|
|
1027
|
+
|
|
1028
|
+
sig do
|
|
1029
|
+
override.returns(
|
|
1030
|
+
T::Array[
|
|
1031
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::TaggedSymbol
|
|
1032
|
+
]
|
|
1033
|
+
)
|
|
1034
|
+
end
|
|
1035
|
+
def self.values
|
|
1036
|
+
end
|
|
1037
|
+
end
|
|
1038
|
+
|
|
451
1039
|
class CallingWindow < Revox::Internal::Type::BaseModel
|
|
452
1040
|
OrHash =
|
|
453
1041
|
T.type_alias do
|
|
@@ -508,54 +1096,498 @@ module Revox
|
|
|
508
1096
|
end
|
|
509
1097
|
end
|
|
510
1098
|
|
|
511
|
-
class
|
|
1099
|
+
class CustomTool < Revox::Internal::Type::BaseModel
|
|
512
1100
|
OrHash =
|
|
513
1101
|
T.type_alias do
|
|
514
1102
|
T.any(
|
|
515
|
-
Revox::AssistantUpdateParams::
|
|
1103
|
+
Revox::AssistantUpdateParams::CustomTool,
|
|
516
1104
|
Revox::Internal::AnyHash
|
|
517
1105
|
)
|
|
518
1106
|
end
|
|
519
1107
|
|
|
520
|
-
|
|
521
|
-
|
|
1108
|
+
# JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
|
|
1109
|
+
# "{{name}}") for dynamic values
|
|
1110
|
+
sig { returns(T.nilable(String)) }
|
|
1111
|
+
attr_accessor :body_template
|
|
522
1112
|
|
|
1113
|
+
# Human-readable description of what the tool does, used by the LLM to decide when
|
|
1114
|
+
# to call it
|
|
523
1115
|
sig { returns(String) }
|
|
524
|
-
attr_accessor :
|
|
1116
|
+
attr_accessor :description
|
|
525
1117
|
|
|
1118
|
+
# HTTP headers to include in the request. Values support {{variable}} placeholders
|
|
526
1119
|
sig do
|
|
527
|
-
|
|
528
|
-
end
|
|
529
|
-
def self.new(answer:, question:)
|
|
1120
|
+
returns(T::Array[Revox::AssistantUpdateParams::CustomTool::Header])
|
|
530
1121
|
end
|
|
1122
|
+
attr_accessor :headers
|
|
531
1123
|
|
|
532
|
-
|
|
533
|
-
|
|
1124
|
+
# Schema defining the parameters the LLM should extract from the conversation to
|
|
1125
|
+
# pass to this tool
|
|
1126
|
+
sig do
|
|
1127
|
+
returns(
|
|
1128
|
+
T::Array[Revox::AssistantUpdateParams::CustomTool::InputSchema]
|
|
1129
|
+
)
|
|
534
1130
|
end
|
|
535
|
-
|
|
1131
|
+
attr_accessor :input_schema
|
|
536
1132
|
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
extend Revox::Internal::Type::Enum
|
|
1133
|
+
# HTTP method to use when calling the API endpoint
|
|
1134
|
+
sig do
|
|
1135
|
+
returns(Revox::AssistantUpdateParams::CustomTool::Method::OrSymbol)
|
|
1136
|
+
end
|
|
1137
|
+
attr_accessor :method_
|
|
543
1138
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
end
|
|
548
|
-
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1139
|
+
# Unique tool name in lowercase_snake_case (e.g. check_inventory)
|
|
1140
|
+
sig { returns(String) }
|
|
1141
|
+
attr_accessor :name
|
|
549
1142
|
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
1143
|
+
# Query string parameters appended to the URL. Values support {{variable}}
|
|
1144
|
+
# placeholders
|
|
1145
|
+
sig do
|
|
1146
|
+
returns(
|
|
1147
|
+
T::Array[Revox::AssistantUpdateParams::CustomTool::QueryParam]
|
|
554
1148
|
)
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
1149
|
+
end
|
|
1150
|
+
attr_accessor :query_params
|
|
1151
|
+
|
|
1152
|
+
# Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
|
|
1153
|
+
# values
|
|
1154
|
+
sig { returns(String) }
|
|
1155
|
+
attr_accessor :url
|
|
1156
|
+
|
|
1157
|
+
sig do
|
|
1158
|
+
params(
|
|
1159
|
+
body_template: T.nilable(String),
|
|
1160
|
+
description: String,
|
|
1161
|
+
headers:
|
|
1162
|
+
T::Array[
|
|
1163
|
+
Revox::AssistantUpdateParams::CustomTool::Header::OrHash
|
|
1164
|
+
],
|
|
1165
|
+
input_schema:
|
|
1166
|
+
T::Array[
|
|
1167
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::OrHash
|
|
1168
|
+
],
|
|
1169
|
+
method_: Revox::AssistantUpdateParams::CustomTool::Method::OrSymbol,
|
|
1170
|
+
name: String,
|
|
1171
|
+
query_params:
|
|
1172
|
+
T::Array[
|
|
1173
|
+
Revox::AssistantUpdateParams::CustomTool::QueryParam::OrHash
|
|
1174
|
+
],
|
|
1175
|
+
url: String
|
|
1176
|
+
).returns(T.attached_class)
|
|
1177
|
+
end
|
|
1178
|
+
def self.new(
|
|
1179
|
+
# JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
|
|
1180
|
+
# "{{name}}") for dynamic values
|
|
1181
|
+
body_template:,
|
|
1182
|
+
# Human-readable description of what the tool does, used by the LLM to decide when
|
|
1183
|
+
# to call it
|
|
1184
|
+
description:,
|
|
1185
|
+
# HTTP headers to include in the request. Values support {{variable}} placeholders
|
|
1186
|
+
headers:,
|
|
1187
|
+
# Schema defining the parameters the LLM should extract from the conversation to
|
|
1188
|
+
# pass to this tool
|
|
1189
|
+
input_schema:,
|
|
1190
|
+
# HTTP method to use when calling the API endpoint
|
|
1191
|
+
method_:,
|
|
1192
|
+
# Unique tool name in lowercase_snake_case (e.g. check_inventory)
|
|
1193
|
+
name:,
|
|
1194
|
+
# Query string parameters appended to the URL. Values support {{variable}}
|
|
1195
|
+
# placeholders
|
|
1196
|
+
query_params:,
|
|
1197
|
+
# Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
|
|
1198
|
+
# values
|
|
1199
|
+
url:
|
|
1200
|
+
)
|
|
1201
|
+
end
|
|
1202
|
+
|
|
1203
|
+
sig do
|
|
1204
|
+
override.returns(
|
|
1205
|
+
{
|
|
1206
|
+
body_template: T.nilable(String),
|
|
1207
|
+
description: String,
|
|
1208
|
+
headers:
|
|
1209
|
+
T::Array[Revox::AssistantUpdateParams::CustomTool::Header],
|
|
1210
|
+
input_schema:
|
|
1211
|
+
T::Array[Revox::AssistantUpdateParams::CustomTool::InputSchema],
|
|
1212
|
+
method_:
|
|
1213
|
+
Revox::AssistantUpdateParams::CustomTool::Method::OrSymbol,
|
|
1214
|
+
name: String,
|
|
1215
|
+
query_params:
|
|
1216
|
+
T::Array[Revox::AssistantUpdateParams::CustomTool::QueryParam],
|
|
1217
|
+
url: String
|
|
1218
|
+
}
|
|
1219
|
+
)
|
|
1220
|
+
end
|
|
1221
|
+
def to_hash
|
|
1222
|
+
end
|
|
1223
|
+
|
|
1224
|
+
class Header < Revox::Internal::Type::BaseModel
|
|
1225
|
+
OrHash =
|
|
1226
|
+
T.type_alias do
|
|
1227
|
+
T.any(
|
|
1228
|
+
Revox::AssistantUpdateParams::CustomTool::Header,
|
|
1229
|
+
Revox::Internal::AnyHash
|
|
1230
|
+
)
|
|
1231
|
+
end
|
|
1232
|
+
|
|
1233
|
+
sig { returns(String) }
|
|
1234
|
+
attr_accessor :key
|
|
1235
|
+
|
|
1236
|
+
sig { returns(String) }
|
|
1237
|
+
attr_accessor :value
|
|
1238
|
+
|
|
1239
|
+
sig { params(key: String, value: String).returns(T.attached_class) }
|
|
1240
|
+
def self.new(key:, value:)
|
|
1241
|
+
end
|
|
1242
|
+
|
|
1243
|
+
sig { override.returns({ key: String, value: String }) }
|
|
1244
|
+
def to_hash
|
|
1245
|
+
end
|
|
1246
|
+
end
|
|
1247
|
+
|
|
1248
|
+
class InputSchema < Revox::Internal::Type::BaseModel
|
|
1249
|
+
OrHash =
|
|
1250
|
+
T.type_alias do
|
|
1251
|
+
T.any(
|
|
1252
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema,
|
|
1253
|
+
Revox::Internal::AnyHash
|
|
1254
|
+
)
|
|
1255
|
+
end
|
|
1256
|
+
|
|
1257
|
+
sig { returns(String) }
|
|
1258
|
+
attr_accessor :name
|
|
1259
|
+
|
|
1260
|
+
sig { returns(T::Boolean) }
|
|
1261
|
+
attr_accessor :required
|
|
1262
|
+
|
|
1263
|
+
sig do
|
|
1264
|
+
returns(
|
|
1265
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::OrSymbol
|
|
1266
|
+
)
|
|
1267
|
+
end
|
|
1268
|
+
attr_accessor :type
|
|
1269
|
+
|
|
1270
|
+
sig { returns(T.nilable(String)) }
|
|
1271
|
+
attr_reader :description
|
|
1272
|
+
|
|
1273
|
+
sig { params(description: String).void }
|
|
1274
|
+
attr_writer :description
|
|
1275
|
+
|
|
1276
|
+
sig { returns(T.nilable(T::Array[String])) }
|
|
1277
|
+
attr_reader :enum_options
|
|
1278
|
+
|
|
1279
|
+
sig { params(enum_options: T::Array[String]).void }
|
|
1280
|
+
attr_writer :enum_options
|
|
1281
|
+
|
|
1282
|
+
sig do
|
|
1283
|
+
params(
|
|
1284
|
+
name: String,
|
|
1285
|
+
required: T::Boolean,
|
|
1286
|
+
type:
|
|
1287
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::OrSymbol,
|
|
1288
|
+
description: String,
|
|
1289
|
+
enum_options: T::Array[String]
|
|
1290
|
+
).returns(T.attached_class)
|
|
1291
|
+
end
|
|
1292
|
+
def self.new(
|
|
1293
|
+
name:,
|
|
1294
|
+
required:,
|
|
1295
|
+
type:,
|
|
1296
|
+
description: nil,
|
|
1297
|
+
enum_options: nil
|
|
1298
|
+
)
|
|
1299
|
+
end
|
|
1300
|
+
|
|
1301
|
+
sig do
|
|
1302
|
+
override.returns(
|
|
1303
|
+
{
|
|
1304
|
+
name: String,
|
|
1305
|
+
required: T::Boolean,
|
|
1306
|
+
type:
|
|
1307
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::OrSymbol,
|
|
1308
|
+
description: String,
|
|
1309
|
+
enum_options: T::Array[String]
|
|
1310
|
+
}
|
|
1311
|
+
)
|
|
1312
|
+
end
|
|
1313
|
+
def to_hash
|
|
1314
|
+
end
|
|
1315
|
+
|
|
1316
|
+
module Type
|
|
1317
|
+
extend Revox::Internal::Type::Enum
|
|
1318
|
+
|
|
1319
|
+
TaggedSymbol =
|
|
1320
|
+
T.type_alias do
|
|
1321
|
+
T.all(
|
|
1322
|
+
Symbol,
|
|
1323
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type
|
|
1324
|
+
)
|
|
1325
|
+
end
|
|
1326
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1327
|
+
|
|
1328
|
+
STRING =
|
|
1329
|
+
T.let(
|
|
1330
|
+
:string,
|
|
1331
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1332
|
+
)
|
|
1333
|
+
NUMBER =
|
|
1334
|
+
T.let(
|
|
1335
|
+
:number,
|
|
1336
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1337
|
+
)
|
|
1338
|
+
BOOLEAN =
|
|
1339
|
+
T.let(
|
|
1340
|
+
:boolean,
|
|
1341
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1342
|
+
)
|
|
1343
|
+
ENUM =
|
|
1344
|
+
T.let(
|
|
1345
|
+
:enum,
|
|
1346
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1347
|
+
)
|
|
1348
|
+
DATE =
|
|
1349
|
+
T.let(
|
|
1350
|
+
:date,
|
|
1351
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1352
|
+
)
|
|
1353
|
+
DATETIME =
|
|
1354
|
+
T.let(
|
|
1355
|
+
:datetime,
|
|
1356
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1357
|
+
)
|
|
1358
|
+
|
|
1359
|
+
sig do
|
|
1360
|
+
override.returns(
|
|
1361
|
+
T::Array[
|
|
1362
|
+
Revox::AssistantUpdateParams::CustomTool::InputSchema::Type::TaggedSymbol
|
|
1363
|
+
]
|
|
1364
|
+
)
|
|
1365
|
+
end
|
|
1366
|
+
def self.values
|
|
1367
|
+
end
|
|
1368
|
+
end
|
|
1369
|
+
end
|
|
1370
|
+
|
|
1371
|
+
# HTTP method to use when calling the API endpoint
|
|
1372
|
+
module Method
|
|
1373
|
+
extend Revox::Internal::Type::Enum
|
|
1374
|
+
|
|
1375
|
+
TaggedSymbol =
|
|
1376
|
+
T.type_alias do
|
|
1377
|
+
T.all(Symbol, Revox::AssistantUpdateParams::CustomTool::Method)
|
|
1378
|
+
end
|
|
1379
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1380
|
+
|
|
1381
|
+
GET =
|
|
1382
|
+
T.let(
|
|
1383
|
+
:GET,
|
|
1384
|
+
Revox::AssistantUpdateParams::CustomTool::Method::TaggedSymbol
|
|
1385
|
+
)
|
|
1386
|
+
POST =
|
|
1387
|
+
T.let(
|
|
1388
|
+
:POST,
|
|
1389
|
+
Revox::AssistantUpdateParams::CustomTool::Method::TaggedSymbol
|
|
1390
|
+
)
|
|
1391
|
+
PUT =
|
|
1392
|
+
T.let(
|
|
1393
|
+
:PUT,
|
|
1394
|
+
Revox::AssistantUpdateParams::CustomTool::Method::TaggedSymbol
|
|
1395
|
+
)
|
|
1396
|
+
PATCH =
|
|
1397
|
+
T.let(
|
|
1398
|
+
:PATCH,
|
|
1399
|
+
Revox::AssistantUpdateParams::CustomTool::Method::TaggedSymbol
|
|
1400
|
+
)
|
|
1401
|
+
DELETE =
|
|
1402
|
+
T.let(
|
|
1403
|
+
:DELETE,
|
|
1404
|
+
Revox::AssistantUpdateParams::CustomTool::Method::TaggedSymbol
|
|
1405
|
+
)
|
|
1406
|
+
|
|
1407
|
+
sig do
|
|
1408
|
+
override.returns(
|
|
1409
|
+
T::Array[
|
|
1410
|
+
Revox::AssistantUpdateParams::CustomTool::Method::TaggedSymbol
|
|
1411
|
+
]
|
|
1412
|
+
)
|
|
1413
|
+
end
|
|
1414
|
+
def self.values
|
|
1415
|
+
end
|
|
1416
|
+
end
|
|
1417
|
+
|
|
1418
|
+
class QueryParam < Revox::Internal::Type::BaseModel
|
|
1419
|
+
OrHash =
|
|
1420
|
+
T.type_alias do
|
|
1421
|
+
T.any(
|
|
1422
|
+
Revox::AssistantUpdateParams::CustomTool::QueryParam,
|
|
1423
|
+
Revox::Internal::AnyHash
|
|
1424
|
+
)
|
|
1425
|
+
end
|
|
1426
|
+
|
|
1427
|
+
sig { returns(String) }
|
|
1428
|
+
attr_accessor :key
|
|
1429
|
+
|
|
1430
|
+
sig { returns(String) }
|
|
1431
|
+
attr_accessor :value
|
|
1432
|
+
|
|
1433
|
+
sig { params(key: String, value: String).returns(T.attached_class) }
|
|
1434
|
+
def self.new(key:, value:)
|
|
1435
|
+
end
|
|
1436
|
+
|
|
1437
|
+
sig { override.returns({ key: String, value: String }) }
|
|
1438
|
+
def to_hash
|
|
1439
|
+
end
|
|
1440
|
+
end
|
|
1441
|
+
end
|
|
1442
|
+
|
|
1443
|
+
# The language used for the notification email content. One of "en" or "fr".
|
|
1444
|
+
# Defaults to "en".
|
|
1445
|
+
module EmailNotificationLanguage
|
|
1446
|
+
extend Revox::Internal::Type::Enum
|
|
1447
|
+
|
|
1448
|
+
TaggedSymbol =
|
|
1449
|
+
T.type_alias do
|
|
1450
|
+
T.all(
|
|
1451
|
+
Symbol,
|
|
1452
|
+
Revox::AssistantUpdateParams::EmailNotificationLanguage
|
|
1453
|
+
)
|
|
1454
|
+
end
|
|
1455
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1456
|
+
|
|
1457
|
+
EN =
|
|
1458
|
+
T.let(
|
|
1459
|
+
:en,
|
|
1460
|
+
Revox::AssistantUpdateParams::EmailNotificationLanguage::TaggedSymbol
|
|
1461
|
+
)
|
|
1462
|
+
FR =
|
|
1463
|
+
T.let(
|
|
1464
|
+
:fr,
|
|
1465
|
+
Revox::AssistantUpdateParams::EmailNotificationLanguage::TaggedSymbol
|
|
1466
|
+
)
|
|
1467
|
+
|
|
1468
|
+
sig do
|
|
1469
|
+
override.returns(
|
|
1470
|
+
T::Array[
|
|
1471
|
+
Revox::AssistantUpdateParams::EmailNotificationLanguage::TaggedSymbol
|
|
1472
|
+
]
|
|
1473
|
+
)
|
|
1474
|
+
end
|
|
1475
|
+
def self.values
|
|
1476
|
+
end
|
|
1477
|
+
end
|
|
1478
|
+
|
|
1479
|
+
module EmailNotificationOutcome
|
|
1480
|
+
extend Revox::Internal::Type::Enum
|
|
1481
|
+
|
|
1482
|
+
TaggedSymbol =
|
|
1483
|
+
T.type_alias do
|
|
1484
|
+
T.all(
|
|
1485
|
+
Symbol,
|
|
1486
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome
|
|
1487
|
+
)
|
|
1488
|
+
end
|
|
1489
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1490
|
+
|
|
1491
|
+
NOT_INTERESTED =
|
|
1492
|
+
T.let(
|
|
1493
|
+
:not_interested,
|
|
1494
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
|
|
1495
|
+
)
|
|
1496
|
+
INTERESTED =
|
|
1497
|
+
T.let(
|
|
1498
|
+
:interested,
|
|
1499
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
|
|
1500
|
+
)
|
|
1501
|
+
COMPLETED =
|
|
1502
|
+
T.let(
|
|
1503
|
+
:completed,
|
|
1504
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
|
|
1505
|
+
)
|
|
1506
|
+
REQUESTED_CALLBACK_LATER =
|
|
1507
|
+
T.let(
|
|
1508
|
+
:requested_callback_later,
|
|
1509
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
|
|
1510
|
+
)
|
|
1511
|
+
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
1512
|
+
T.let(
|
|
1513
|
+
:requested_callback_new_number,
|
|
1514
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
|
|
1515
|
+
)
|
|
1516
|
+
DO_NOT_CONTACT =
|
|
1517
|
+
T.let(
|
|
1518
|
+
:do_not_contact,
|
|
1519
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
|
|
1520
|
+
)
|
|
1521
|
+
AI_AVERSE =
|
|
1522
|
+
T.let(
|
|
1523
|
+
:ai_averse,
|
|
1524
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
|
|
1525
|
+
)
|
|
1526
|
+
NONE =
|
|
1527
|
+
T.let(
|
|
1528
|
+
:none,
|
|
1529
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
|
|
1530
|
+
)
|
|
1531
|
+
|
|
1532
|
+
sig do
|
|
1533
|
+
override.returns(
|
|
1534
|
+
T::Array[
|
|
1535
|
+
Revox::AssistantUpdateParams::EmailNotificationOutcome::TaggedSymbol
|
|
1536
|
+
]
|
|
1537
|
+
)
|
|
1538
|
+
end
|
|
1539
|
+
def self.values
|
|
1540
|
+
end
|
|
1541
|
+
end
|
|
1542
|
+
|
|
1543
|
+
class FaqItem < Revox::Internal::Type::BaseModel
|
|
1544
|
+
OrHash =
|
|
1545
|
+
T.type_alias do
|
|
1546
|
+
T.any(
|
|
1547
|
+
Revox::AssistantUpdateParams::FaqItem,
|
|
1548
|
+
Revox::Internal::AnyHash
|
|
1549
|
+
)
|
|
1550
|
+
end
|
|
1551
|
+
|
|
1552
|
+
sig { returns(String) }
|
|
1553
|
+
attr_accessor :answer
|
|
1554
|
+
|
|
1555
|
+
sig { returns(String) }
|
|
1556
|
+
attr_accessor :question
|
|
1557
|
+
|
|
1558
|
+
sig do
|
|
1559
|
+
params(answer: String, question: String).returns(T.attached_class)
|
|
1560
|
+
end
|
|
1561
|
+
def self.new(answer:, question:)
|
|
1562
|
+
end
|
|
1563
|
+
|
|
1564
|
+
sig { override.returns({ answer: String, question: String }) }
|
|
1565
|
+
def to_hash
|
|
1566
|
+
end
|
|
1567
|
+
end
|
|
1568
|
+
|
|
1569
|
+
# How the first sentence should be handled. "generated" means the LLM will
|
|
1570
|
+
# generate a response based on the first_sentence instruction. "static" means the
|
|
1571
|
+
# first_sentence will be spoken exactly as provided. "none" means the agent will
|
|
1572
|
+
# not speak first and will wait for the user.
|
|
1573
|
+
module FirstSentenceMode
|
|
1574
|
+
extend Revox::Internal::Type::Enum
|
|
1575
|
+
|
|
1576
|
+
TaggedSymbol =
|
|
1577
|
+
T.type_alias do
|
|
1578
|
+
T.all(Symbol, Revox::AssistantUpdateParams::FirstSentenceMode)
|
|
1579
|
+
end
|
|
1580
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1581
|
+
|
|
1582
|
+
GENERATED =
|
|
1583
|
+
T.let(
|
|
1584
|
+
:generated,
|
|
1585
|
+
Revox::AssistantUpdateParams::FirstSentenceMode::TaggedSymbol
|
|
1586
|
+
)
|
|
1587
|
+
STATIC =
|
|
1588
|
+
T.let(
|
|
1589
|
+
:static,
|
|
1590
|
+
Revox::AssistantUpdateParams::FirstSentenceMode::TaggedSymbol
|
|
559
1591
|
)
|
|
560
1592
|
NONE =
|
|
561
1593
|
T.let(
|
|
@@ -574,85 +1606,333 @@ module Revox
|
|
|
574
1606
|
end
|
|
575
1607
|
end
|
|
576
1608
|
|
|
577
|
-
|
|
578
|
-
|
|
1609
|
+
# When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
|
|
1610
|
+
# trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
|
|
1611
|
+
module HumanTransferMode
|
|
1612
|
+
extend Revox::Internal::Type::Enum
|
|
1613
|
+
|
|
1614
|
+
TaggedSymbol =
|
|
1615
|
+
T.type_alias do
|
|
1616
|
+
T.all(Symbol, Revox::AssistantUpdateParams::HumanTransferMode)
|
|
1617
|
+
end
|
|
1618
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1619
|
+
|
|
1620
|
+
WARM =
|
|
1621
|
+
T.let(
|
|
1622
|
+
:warm,
|
|
1623
|
+
Revox::AssistantUpdateParams::HumanTransferMode::TaggedSymbol
|
|
1624
|
+
)
|
|
1625
|
+
COLD =
|
|
1626
|
+
T.let(
|
|
1627
|
+
:cold,
|
|
1628
|
+
Revox::AssistantUpdateParams::HumanTransferMode::TaggedSymbol
|
|
1629
|
+
)
|
|
1630
|
+
|
|
1631
|
+
sig do
|
|
1632
|
+
override.returns(
|
|
1633
|
+
T::Array[
|
|
1634
|
+
Revox::AssistantUpdateParams::HumanTransferMode::TaggedSymbol
|
|
1635
|
+
]
|
|
1636
|
+
)
|
|
1637
|
+
end
|
|
1638
|
+
def self.values
|
|
1639
|
+
end
|
|
1640
|
+
end
|
|
1641
|
+
|
|
1642
|
+
module LlmModel
|
|
1643
|
+
extend Revox::Internal::Type::Union
|
|
1644
|
+
|
|
1645
|
+
Variants =
|
|
1646
|
+
T.type_alias do
|
|
1647
|
+
T.any(
|
|
1648
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember0,
|
|
1649
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1,
|
|
1650
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2,
|
|
1651
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3
|
|
1652
|
+
)
|
|
1653
|
+
end
|
|
1654
|
+
|
|
1655
|
+
class UnionMember0 < Revox::Internal::Type::BaseModel
|
|
1656
|
+
OrHash =
|
|
1657
|
+
T.type_alias do
|
|
1658
|
+
T.any(
|
|
1659
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember0,
|
|
1660
|
+
Revox::Internal::AnyHash
|
|
1661
|
+
)
|
|
1662
|
+
end
|
|
1663
|
+
|
|
1664
|
+
sig do
|
|
1665
|
+
returns(
|
|
1666
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember0::Name::OrSymbol
|
|
1667
|
+
)
|
|
1668
|
+
end
|
|
1669
|
+
attr_accessor :name
|
|
1670
|
+
|
|
1671
|
+
sig { returns(Symbol) }
|
|
1672
|
+
attr_accessor :type
|
|
1673
|
+
|
|
1674
|
+
sig do
|
|
1675
|
+
params(
|
|
1676
|
+
name:
|
|
1677
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember0::Name::OrSymbol,
|
|
1678
|
+
type: Symbol
|
|
1679
|
+
).returns(T.attached_class)
|
|
1680
|
+
end
|
|
1681
|
+
def self.new(name:, type: :"dedicated-instance")
|
|
1682
|
+
end
|
|
1683
|
+
|
|
1684
|
+
sig do
|
|
1685
|
+
override.returns(
|
|
1686
|
+
{
|
|
1687
|
+
name:
|
|
1688
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember0::Name::OrSymbol,
|
|
1689
|
+
type: Symbol
|
|
1690
|
+
}
|
|
1691
|
+
)
|
|
1692
|
+
end
|
|
1693
|
+
def to_hash
|
|
1694
|
+
end
|
|
1695
|
+
|
|
1696
|
+
module Name
|
|
1697
|
+
extend Revox::Internal::Type::Enum
|
|
1698
|
+
|
|
1699
|
+
TaggedSymbol =
|
|
1700
|
+
T.type_alias do
|
|
1701
|
+
T.all(
|
|
1702
|
+
Symbol,
|
|
1703
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember0::Name
|
|
1704
|
+
)
|
|
1705
|
+
end
|
|
1706
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
1707
|
+
|
|
1708
|
+
GPT_4_1 =
|
|
1709
|
+
T.let(
|
|
1710
|
+
:"gpt-4.1",
|
|
1711
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember0::Name::TaggedSymbol
|
|
1712
|
+
)
|
|
1713
|
+
MINISTRAL_3_8B_INSTRUCT =
|
|
1714
|
+
T.let(
|
|
1715
|
+
:"ministral-3-8b-instruct",
|
|
1716
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember0::Name::TaggedSymbol
|
|
1717
|
+
)
|
|
1718
|
+
|
|
1719
|
+
sig do
|
|
1720
|
+
override.returns(
|
|
1721
|
+
T::Array[
|
|
1722
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember0::Name::TaggedSymbol
|
|
1723
|
+
]
|
|
1724
|
+
)
|
|
1725
|
+
end
|
|
1726
|
+
def self.values
|
|
1727
|
+
end
|
|
1728
|
+
end
|
|
1729
|
+
end
|
|
1730
|
+
|
|
1731
|
+
class UnionMember1 < Revox::Internal::Type::BaseModel
|
|
1732
|
+
OrHash =
|
|
1733
|
+
T.type_alias do
|
|
1734
|
+
T.any(
|
|
1735
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1,
|
|
1736
|
+
Revox::Internal::AnyHash
|
|
1737
|
+
)
|
|
1738
|
+
end
|
|
1739
|
+
|
|
1740
|
+
# The model ID to use from OpenRouter. eg: openai/gpt-4.1
|
|
1741
|
+
sig { returns(String) }
|
|
1742
|
+
attr_accessor :openrouter_model_id
|
|
1743
|
+
|
|
1744
|
+
# The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
|
|
1745
|
+
sig { returns(String) }
|
|
1746
|
+
attr_accessor :openrouter_provider
|
|
1747
|
+
|
|
1748
|
+
# Use a model from OpenRouter.
|
|
1749
|
+
sig { returns(Symbol) }
|
|
1750
|
+
attr_accessor :type
|
|
1751
|
+
|
|
1752
|
+
sig do
|
|
1753
|
+
params(
|
|
1754
|
+
openrouter_model_id: String,
|
|
1755
|
+
openrouter_provider: String,
|
|
1756
|
+
type: Symbol
|
|
1757
|
+
).returns(T.attached_class)
|
|
1758
|
+
end
|
|
1759
|
+
def self.new(
|
|
1760
|
+
# The model ID to use from OpenRouter. eg: openai/gpt-4.1
|
|
1761
|
+
openrouter_model_id:,
|
|
1762
|
+
# The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
|
|
1763
|
+
openrouter_provider:,
|
|
1764
|
+
# Use a model from OpenRouter.
|
|
1765
|
+
type: :openrouter
|
|
1766
|
+
)
|
|
1767
|
+
end
|
|
1768
|
+
|
|
1769
|
+
sig do
|
|
1770
|
+
override.returns(
|
|
1771
|
+
{
|
|
1772
|
+
openrouter_model_id: String,
|
|
1773
|
+
openrouter_provider: String,
|
|
1774
|
+
type: Symbol
|
|
1775
|
+
}
|
|
1776
|
+
)
|
|
1777
|
+
end
|
|
1778
|
+
def to_hash
|
|
1779
|
+
end
|
|
1780
|
+
end
|
|
1781
|
+
|
|
1782
|
+
class UnionMember2 < Revox::Internal::Type::BaseModel
|
|
1783
|
+
OrHash =
|
|
1784
|
+
T.type_alias do
|
|
1785
|
+
T.any(
|
|
1786
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2,
|
|
1787
|
+
Revox::Internal::AnyHash
|
|
1788
|
+
)
|
|
1789
|
+
end
|
|
1790
|
+
|
|
1791
|
+
# API key sent as Bearer token to the custom endpoint.
|
|
1792
|
+
sig { returns(String) }
|
|
1793
|
+
attr_accessor :api_key
|
|
1794
|
+
|
|
1795
|
+
# Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
|
|
1796
|
+
sig { returns(String) }
|
|
1797
|
+
attr_accessor :api_url
|
|
579
1798
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
1799
|
+
# Model name as expected by the provider, e.g. meta-llama/llama-3-70b
|
|
1800
|
+
sig { returns(String) }
|
|
1801
|
+
attr_accessor :model_name
|
|
1802
|
+
|
|
1803
|
+
# OpenAI-compatible chat completions API (bring your own endpoint and key).
|
|
1804
|
+
sig { returns(Symbol) }
|
|
1805
|
+
attr_accessor :type
|
|
1806
|
+
|
|
1807
|
+
sig do
|
|
1808
|
+
params(
|
|
1809
|
+
api_key: String,
|
|
1810
|
+
api_url: String,
|
|
1811
|
+
model_name: String,
|
|
1812
|
+
type: Symbol
|
|
1813
|
+
).returns(T.attached_class)
|
|
1814
|
+
end
|
|
1815
|
+
def self.new(
|
|
1816
|
+
# API key sent as Bearer token to the custom endpoint.
|
|
1817
|
+
api_key:,
|
|
1818
|
+
# Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
|
|
1819
|
+
api_url:,
|
|
1820
|
+
# Model name as expected by the provider, e.g. meta-llama/llama-3-70b
|
|
1821
|
+
model_name:,
|
|
1822
|
+
# OpenAI-compatible chat completions API (bring your own endpoint and key).
|
|
1823
|
+
type: :custom
|
|
1824
|
+
)
|
|
1825
|
+
end
|
|
1826
|
+
|
|
1827
|
+
sig do
|
|
1828
|
+
override.returns(
|
|
1829
|
+
{
|
|
1830
|
+
api_key: String,
|
|
1831
|
+
api_url: String,
|
|
1832
|
+
model_name: String,
|
|
1833
|
+
type: Symbol
|
|
1834
|
+
}
|
|
585
1835
|
)
|
|
586
1836
|
end
|
|
1837
|
+
def to_hash
|
|
1838
|
+
end
|
|
1839
|
+
end
|
|
587
1840
|
|
|
588
|
-
class
|
|
1841
|
+
class UnionMember3 < Revox::Internal::Type::BaseModel
|
|
589
1842
|
OrHash =
|
|
590
1843
|
T.type_alias do
|
|
591
1844
|
T.any(
|
|
592
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1845
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3,
|
|
593
1846
|
Revox::Internal::AnyHash
|
|
594
1847
|
)
|
|
595
1848
|
end
|
|
596
1849
|
|
|
1850
|
+
# The provider to use from Realtime. eg: openai, google.
|
|
597
1851
|
sig do
|
|
598
1852
|
returns(
|
|
599
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1853
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::OrSymbol
|
|
600
1854
|
)
|
|
601
1855
|
end
|
|
602
|
-
attr_accessor :
|
|
1856
|
+
attr_accessor :provider
|
|
1857
|
+
|
|
1858
|
+
# The model ID to use from Realtime. eg: gpt-4.1
|
|
1859
|
+
sig { returns(String) }
|
|
1860
|
+
attr_accessor :realtime_model_id
|
|
603
1861
|
|
|
1862
|
+
# Use a model from Realtime.
|
|
604
1863
|
sig { returns(Symbol) }
|
|
605
1864
|
attr_accessor :type
|
|
606
1865
|
|
|
1866
|
+
# Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
|
|
1867
|
+
sig { returns(T.nilable(String)) }
|
|
1868
|
+
attr_reader :realtime_voice_id
|
|
1869
|
+
|
|
1870
|
+
sig { params(realtime_voice_id: String).void }
|
|
1871
|
+
attr_writer :realtime_voice_id
|
|
1872
|
+
|
|
607
1873
|
sig do
|
|
608
1874
|
params(
|
|
609
|
-
|
|
610
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1875
|
+
provider:
|
|
1876
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::OrSymbol,
|
|
1877
|
+
realtime_model_id: String,
|
|
1878
|
+
realtime_voice_id: String,
|
|
611
1879
|
type: Symbol
|
|
612
1880
|
).returns(T.attached_class)
|
|
613
1881
|
end
|
|
614
|
-
def self.new(
|
|
1882
|
+
def self.new(
|
|
1883
|
+
# The provider to use from Realtime. eg: openai, google.
|
|
1884
|
+
provider:,
|
|
1885
|
+
# The model ID to use from Realtime. eg: gpt-4.1
|
|
1886
|
+
realtime_model_id:,
|
|
1887
|
+
# Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
|
|
1888
|
+
realtime_voice_id: nil,
|
|
1889
|
+
# Use a model from Realtime.
|
|
1890
|
+
type: :realtime
|
|
1891
|
+
)
|
|
615
1892
|
end
|
|
616
1893
|
|
|
617
1894
|
sig do
|
|
618
1895
|
override.returns(
|
|
619
1896
|
{
|
|
620
|
-
|
|
621
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
622
|
-
|
|
1897
|
+
provider:
|
|
1898
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::OrSymbol,
|
|
1899
|
+
realtime_model_id: String,
|
|
1900
|
+
type: Symbol,
|
|
1901
|
+
realtime_voice_id: String
|
|
623
1902
|
}
|
|
624
1903
|
)
|
|
625
1904
|
end
|
|
626
1905
|
def to_hash
|
|
627
1906
|
end
|
|
628
1907
|
|
|
629
|
-
|
|
1908
|
+
# The provider to use from Realtime. eg: openai, google.
|
|
1909
|
+
module Provider
|
|
630
1910
|
extend Revox::Internal::Type::Enum
|
|
631
1911
|
|
|
632
1912
|
TaggedSymbol =
|
|
633
1913
|
T.type_alias do
|
|
634
1914
|
T.all(
|
|
635
1915
|
Symbol,
|
|
636
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1916
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider
|
|
637
1917
|
)
|
|
638
1918
|
end
|
|
639
1919
|
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
640
1920
|
|
|
641
|
-
|
|
1921
|
+
OPENAI =
|
|
642
1922
|
T.let(
|
|
643
|
-
:
|
|
644
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1923
|
+
:openai,
|
|
1924
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
645
1925
|
)
|
|
646
|
-
|
|
1926
|
+
GOOGLE =
|
|
647
1927
|
T.let(
|
|
648
|
-
:
|
|
649
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1928
|
+
:google,
|
|
1929
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
650
1930
|
)
|
|
651
1931
|
|
|
652
1932
|
sig do
|
|
653
1933
|
override.returns(
|
|
654
1934
|
T::Array[
|
|
655
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1935
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
656
1936
|
]
|
|
657
1937
|
)
|
|
658
1938
|
end
|
|
@@ -661,64 +1941,377 @@ module Revox
|
|
|
661
1941
|
end
|
|
662
1942
|
end
|
|
663
1943
|
|
|
664
|
-
|
|
1944
|
+
sig do
|
|
1945
|
+
override.returns(
|
|
1946
|
+
T::Array[Revox::AssistantUpdateParams::LlmModel::Variants]
|
|
1947
|
+
)
|
|
1948
|
+
end
|
|
1949
|
+
def self.variants
|
|
1950
|
+
end
|
|
1951
|
+
end
|
|
1952
|
+
|
|
1953
|
+
class Position < Revox::Internal::Type::BaseModel
|
|
1954
|
+
OrHash =
|
|
1955
|
+
T.type_alias do
|
|
1956
|
+
T.any(
|
|
1957
|
+
Revox::AssistantUpdateParams::Position,
|
|
1958
|
+
Revox::Internal::AnyHash
|
|
1959
|
+
)
|
|
1960
|
+
end
|
|
1961
|
+
|
|
1962
|
+
sig { returns(Float) }
|
|
1963
|
+
attr_accessor :x
|
|
1964
|
+
|
|
1965
|
+
sig { returns(Float) }
|
|
1966
|
+
attr_accessor :y_
|
|
1967
|
+
|
|
1968
|
+
# Canvas position of this assistant's node in its multi-step flow editor.
|
|
1969
|
+
sig { params(x: Float, y_: Float).returns(T.attached_class) }
|
|
1970
|
+
def self.new(x:, y_:)
|
|
1971
|
+
end
|
|
1972
|
+
|
|
1973
|
+
sig { override.returns({ x: Float, y_: Float }) }
|
|
1974
|
+
def to_hash
|
|
1975
|
+
end
|
|
1976
|
+
end
|
|
1977
|
+
|
|
1978
|
+
class PromptFlow < Revox::Internal::Type::BaseModel
|
|
1979
|
+
OrHash =
|
|
1980
|
+
T.type_alias do
|
|
1981
|
+
T.any(
|
|
1982
|
+
Revox::AssistantUpdateParams::PromptFlow,
|
|
1983
|
+
Revox::Internal::AnyHash
|
|
1984
|
+
)
|
|
1985
|
+
end
|
|
1986
|
+
|
|
1987
|
+
sig do
|
|
1988
|
+
returns(T::Array[Revox::AssistantUpdateParams::PromptFlow::Edge])
|
|
1989
|
+
end
|
|
1990
|
+
attr_accessor :edges
|
|
1991
|
+
|
|
1992
|
+
sig do
|
|
1993
|
+
returns(T::Array[Revox::AssistantUpdateParams::PromptFlow::Node])
|
|
1994
|
+
end
|
|
1995
|
+
attr_accessor :nodes
|
|
1996
|
+
|
|
1997
|
+
# Visual prompt constructor data (nodes, edges, positions). Used by the UI to
|
|
1998
|
+
# re-open the visual editor. Does not affect call behavior — the flattened prompt
|
|
1999
|
+
# field is what the LLM receives.
|
|
2000
|
+
sig do
|
|
2001
|
+
params(
|
|
2002
|
+
edges:
|
|
2003
|
+
T::Array[Revox::AssistantUpdateParams::PromptFlow::Edge::OrHash],
|
|
2004
|
+
nodes:
|
|
2005
|
+
T::Array[Revox::AssistantUpdateParams::PromptFlow::Node::OrHash]
|
|
2006
|
+
).returns(T.attached_class)
|
|
2007
|
+
end
|
|
2008
|
+
def self.new(edges:, nodes:)
|
|
2009
|
+
end
|
|
2010
|
+
|
|
2011
|
+
sig do
|
|
2012
|
+
override.returns(
|
|
2013
|
+
{
|
|
2014
|
+
edges: T::Array[Revox::AssistantUpdateParams::PromptFlow::Edge],
|
|
2015
|
+
nodes: T::Array[Revox::AssistantUpdateParams::PromptFlow::Node]
|
|
2016
|
+
}
|
|
2017
|
+
)
|
|
2018
|
+
end
|
|
2019
|
+
def to_hash
|
|
2020
|
+
end
|
|
2021
|
+
|
|
2022
|
+
class Edge < Revox::Internal::Type::BaseModel
|
|
665
2023
|
OrHash =
|
|
666
2024
|
T.type_alias do
|
|
667
2025
|
T.any(
|
|
668
|
-
Revox::AssistantUpdateParams::
|
|
2026
|
+
Revox::AssistantUpdateParams::PromptFlow::Edge,
|
|
669
2027
|
Revox::Internal::AnyHash
|
|
670
2028
|
)
|
|
671
2029
|
end
|
|
672
2030
|
|
|
673
|
-
# The model ID to use from OpenRouter. eg: openai/gpt-4.1
|
|
674
2031
|
sig { returns(String) }
|
|
675
|
-
attr_accessor :
|
|
2032
|
+
attr_accessor :id
|
|
676
2033
|
|
|
677
|
-
# The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
|
|
678
2034
|
sig { returns(String) }
|
|
679
|
-
attr_accessor :
|
|
2035
|
+
attr_accessor :source
|
|
2036
|
+
|
|
2037
|
+
sig { returns(String) }
|
|
2038
|
+
attr_accessor :target
|
|
2039
|
+
|
|
2040
|
+
sig do
|
|
2041
|
+
params(id: String, source: String, target: String).returns(
|
|
2042
|
+
T.attached_class
|
|
2043
|
+
)
|
|
2044
|
+
end
|
|
2045
|
+
def self.new(id:, source:, target:)
|
|
2046
|
+
end
|
|
2047
|
+
|
|
2048
|
+
sig do
|
|
2049
|
+
override.returns({ id: String, source: String, target: String })
|
|
2050
|
+
end
|
|
2051
|
+
def to_hash
|
|
2052
|
+
end
|
|
2053
|
+
end
|
|
2054
|
+
|
|
2055
|
+
class Node < Revox::Internal::Type::BaseModel
|
|
2056
|
+
OrHash =
|
|
2057
|
+
T.type_alias do
|
|
2058
|
+
T.any(
|
|
2059
|
+
Revox::AssistantUpdateParams::PromptFlow::Node,
|
|
2060
|
+
Revox::Internal::AnyHash
|
|
2061
|
+
)
|
|
2062
|
+
end
|
|
2063
|
+
|
|
2064
|
+
sig { returns(String) }
|
|
2065
|
+
attr_accessor :id
|
|
2066
|
+
|
|
2067
|
+
sig { returns(Revox::AssistantUpdateParams::PromptFlow::Node::Data) }
|
|
2068
|
+
attr_reader :data
|
|
2069
|
+
|
|
2070
|
+
sig do
|
|
2071
|
+
params(
|
|
2072
|
+
data: Revox::AssistantUpdateParams::PromptFlow::Node::Data::OrHash
|
|
2073
|
+
).void
|
|
2074
|
+
end
|
|
2075
|
+
attr_writer :data
|
|
2076
|
+
|
|
2077
|
+
sig do
|
|
2078
|
+
returns(Revox::AssistantUpdateParams::PromptFlow::Node::Position)
|
|
2079
|
+
end
|
|
2080
|
+
attr_reader :position
|
|
2081
|
+
|
|
2082
|
+
sig do
|
|
2083
|
+
params(
|
|
2084
|
+
position:
|
|
2085
|
+
Revox::AssistantUpdateParams::PromptFlow::Node::Position::OrHash
|
|
2086
|
+
).void
|
|
2087
|
+
end
|
|
2088
|
+
attr_writer :position
|
|
680
2089
|
|
|
681
|
-
# Use a model from OpenRouter.
|
|
682
2090
|
sig { returns(Symbol) }
|
|
683
2091
|
attr_accessor :type
|
|
684
2092
|
|
|
685
2093
|
sig do
|
|
686
2094
|
params(
|
|
687
|
-
|
|
688
|
-
|
|
2095
|
+
id: String,
|
|
2096
|
+
data:
|
|
2097
|
+
Revox::AssistantUpdateParams::PromptFlow::Node::Data::OrHash,
|
|
2098
|
+
position:
|
|
2099
|
+
Revox::AssistantUpdateParams::PromptFlow::Node::Position::OrHash,
|
|
689
2100
|
type: Symbol
|
|
690
2101
|
).returns(T.attached_class)
|
|
691
2102
|
end
|
|
692
|
-
def self.new(
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
2103
|
+
def self.new(id:, data:, position:, type: :promptBlock)
|
|
2104
|
+
end
|
|
2105
|
+
|
|
2106
|
+
sig do
|
|
2107
|
+
override.returns(
|
|
2108
|
+
{
|
|
2109
|
+
id: String,
|
|
2110
|
+
data: Revox::AssistantUpdateParams::PromptFlow::Node::Data,
|
|
2111
|
+
position:
|
|
2112
|
+
Revox::AssistantUpdateParams::PromptFlow::Node::Position,
|
|
2113
|
+
type: Symbol
|
|
2114
|
+
}
|
|
2115
|
+
)
|
|
2116
|
+
end
|
|
2117
|
+
def to_hash
|
|
2118
|
+
end
|
|
2119
|
+
|
|
2120
|
+
class Data < Revox::Internal::Type::BaseModel
|
|
2121
|
+
OrHash =
|
|
2122
|
+
T.type_alias do
|
|
2123
|
+
T.any(
|
|
2124
|
+
Revox::AssistantUpdateParams::PromptFlow::Node::Data,
|
|
2125
|
+
Revox::Internal::AnyHash
|
|
2126
|
+
)
|
|
2127
|
+
end
|
|
2128
|
+
|
|
2129
|
+
sig { returns(String) }
|
|
2130
|
+
attr_accessor :body
|
|
2131
|
+
|
|
2132
|
+
sig { returns(String) }
|
|
2133
|
+
attr_accessor :title
|
|
2134
|
+
|
|
2135
|
+
sig do
|
|
2136
|
+
params(body: String, title: String).returns(T.attached_class)
|
|
2137
|
+
end
|
|
2138
|
+
def self.new(body:, title:)
|
|
2139
|
+
end
|
|
2140
|
+
|
|
2141
|
+
sig { override.returns({ body: String, title: String }) }
|
|
2142
|
+
def to_hash
|
|
2143
|
+
end
|
|
2144
|
+
end
|
|
2145
|
+
|
|
2146
|
+
class Position < Revox::Internal::Type::BaseModel
|
|
2147
|
+
OrHash =
|
|
2148
|
+
T.type_alias do
|
|
2149
|
+
T.any(
|
|
2150
|
+
Revox::AssistantUpdateParams::PromptFlow::Node::Position,
|
|
2151
|
+
Revox::Internal::AnyHash
|
|
2152
|
+
)
|
|
2153
|
+
end
|
|
2154
|
+
|
|
2155
|
+
sig { returns(Float) }
|
|
2156
|
+
attr_accessor :x
|
|
2157
|
+
|
|
2158
|
+
sig { returns(Float) }
|
|
2159
|
+
attr_accessor :y_
|
|
2160
|
+
|
|
2161
|
+
sig { params(x: Float, y_: Float).returns(T.attached_class) }
|
|
2162
|
+
def self.new(x:, y_:)
|
|
2163
|
+
end
|
|
2164
|
+
|
|
2165
|
+
sig { override.returns({ x: Float, y_: Float }) }
|
|
2166
|
+
def to_hash
|
|
2167
|
+
end
|
|
700
2168
|
end
|
|
2169
|
+
end
|
|
2170
|
+
end
|
|
2171
|
+
|
|
2172
|
+
class Slack < Revox::Internal::Type::BaseModel
|
|
2173
|
+
OrHash =
|
|
2174
|
+
T.type_alias do
|
|
2175
|
+
T.any(Revox::AssistantUpdateParams::Slack, Revox::Internal::AnyHash)
|
|
2176
|
+
end
|
|
2177
|
+
|
|
2178
|
+
# The Slack channel ID where the notification will be posted.
|
|
2179
|
+
sig { returns(String) }
|
|
2180
|
+
attr_accessor :channel_id
|
|
2181
|
+
|
|
2182
|
+
# The Nango connection ID linking the org's Slack workspace to Revox.
|
|
2183
|
+
sig { returns(String) }
|
|
2184
|
+
attr_accessor :connection_id
|
|
2185
|
+
|
|
2186
|
+
# Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
|
|
2187
|
+
# Use 'none' to notify when outcome is null.
|
|
2188
|
+
sig do
|
|
2189
|
+
returns(
|
|
2190
|
+
T::Array[Revox::AssistantUpdateParams::Slack::Outcome::OrSymbol]
|
|
2191
|
+
)
|
|
2192
|
+
end
|
|
2193
|
+
attr_accessor :outcomes
|
|
2194
|
+
|
|
2195
|
+
# Human-readable Slack channel name, cached for display in the UI.
|
|
2196
|
+
sig { returns(T.nilable(String)) }
|
|
2197
|
+
attr_accessor :channel_name
|
|
2198
|
+
|
|
2199
|
+
# Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
2200
|
+
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
|
|
2201
|
+
# {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
|
|
2202
|
+
# prompt_variables and structured_output keys. When null/empty a default template
|
|
2203
|
+
# is used.
|
|
2204
|
+
sig { returns(T.nilable(String)) }
|
|
2205
|
+
attr_accessor :template
|
|
2206
|
+
|
|
2207
|
+
# Slack notification config. When set, posts a message to the chosen channel after
|
|
2208
|
+
# a call ends with one of the configured outcomes.
|
|
2209
|
+
sig do
|
|
2210
|
+
params(
|
|
2211
|
+
channel_id: String,
|
|
2212
|
+
connection_id: String,
|
|
2213
|
+
outcomes:
|
|
2214
|
+
T::Array[Revox::AssistantUpdateParams::Slack::Outcome::OrSymbol],
|
|
2215
|
+
channel_name: T.nilable(String),
|
|
2216
|
+
template: T.nilable(String)
|
|
2217
|
+
).returns(T.attached_class)
|
|
2218
|
+
end
|
|
2219
|
+
def self.new(
|
|
2220
|
+
# The Slack channel ID where the notification will be posted.
|
|
2221
|
+
channel_id:,
|
|
2222
|
+
# The Nango connection ID linking the org's Slack workspace to Revox.
|
|
2223
|
+
connection_id:,
|
|
2224
|
+
# Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
|
|
2225
|
+
# Use 'none' to notify when outcome is null.
|
|
2226
|
+
outcomes:,
|
|
2227
|
+
# Human-readable Slack channel name, cached for display in the UI.
|
|
2228
|
+
channel_name: nil,
|
|
2229
|
+
# Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
2230
|
+
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
|
|
2231
|
+
# {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
|
|
2232
|
+
# prompt_variables and structured_output keys. When null/empty a default template
|
|
2233
|
+
# is used.
|
|
2234
|
+
template: nil
|
|
2235
|
+
)
|
|
2236
|
+
end
|
|
2237
|
+
|
|
2238
|
+
sig do
|
|
2239
|
+
override.returns(
|
|
2240
|
+
{
|
|
2241
|
+
channel_id: String,
|
|
2242
|
+
connection_id: String,
|
|
2243
|
+
outcomes:
|
|
2244
|
+
T::Array[
|
|
2245
|
+
Revox::AssistantUpdateParams::Slack::Outcome::OrSymbol
|
|
2246
|
+
],
|
|
2247
|
+
channel_name: T.nilable(String),
|
|
2248
|
+
template: T.nilable(String)
|
|
2249
|
+
}
|
|
2250
|
+
)
|
|
2251
|
+
end
|
|
2252
|
+
def to_hash
|
|
2253
|
+
end
|
|
2254
|
+
|
|
2255
|
+
module Outcome
|
|
2256
|
+
extend Revox::Internal::Type::Enum
|
|
2257
|
+
|
|
2258
|
+
TaggedSymbol =
|
|
2259
|
+
T.type_alias do
|
|
2260
|
+
T.all(Symbol, Revox::AssistantUpdateParams::Slack::Outcome)
|
|
2261
|
+
end
|
|
2262
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2263
|
+
|
|
2264
|
+
NOT_INTERESTED =
|
|
2265
|
+
T.let(
|
|
2266
|
+
:not_interested,
|
|
2267
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2268
|
+
)
|
|
2269
|
+
INTERESTED =
|
|
2270
|
+
T.let(
|
|
2271
|
+
:interested,
|
|
2272
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2273
|
+
)
|
|
2274
|
+
COMPLETED =
|
|
2275
|
+
T.let(
|
|
2276
|
+
:completed,
|
|
2277
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2278
|
+
)
|
|
2279
|
+
REQUESTED_CALLBACK_LATER =
|
|
2280
|
+
T.let(
|
|
2281
|
+
:requested_callback_later,
|
|
2282
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2283
|
+
)
|
|
2284
|
+
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
2285
|
+
T.let(
|
|
2286
|
+
:requested_callback_new_number,
|
|
2287
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2288
|
+
)
|
|
2289
|
+
DO_NOT_CONTACT =
|
|
2290
|
+
T.let(
|
|
2291
|
+
:do_not_contact,
|
|
2292
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2293
|
+
)
|
|
2294
|
+
AI_AVERSE =
|
|
2295
|
+
T.let(
|
|
2296
|
+
:ai_averse,
|
|
2297
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2298
|
+
)
|
|
2299
|
+
NONE =
|
|
2300
|
+
T.let(
|
|
2301
|
+
:none,
|
|
2302
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2303
|
+
)
|
|
701
2304
|
|
|
702
2305
|
sig do
|
|
703
2306
|
override.returns(
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
type: Symbol
|
|
708
|
-
}
|
|
2307
|
+
T::Array[
|
|
2308
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2309
|
+
]
|
|
709
2310
|
)
|
|
710
2311
|
end
|
|
711
|
-
def
|
|
2312
|
+
def self.values
|
|
712
2313
|
end
|
|
713
2314
|
end
|
|
714
|
-
|
|
715
|
-
sig do
|
|
716
|
-
override.returns(
|
|
717
|
-
T::Array[Revox::AssistantUpdateParams::LlmModel::Variants]
|
|
718
|
-
)
|
|
719
|
-
end
|
|
720
|
-
def self.variants
|
|
721
|
-
end
|
|
722
2315
|
end
|
|
723
2316
|
|
|
724
2317
|
class StructuredOutputConfig < Revox::Internal::Type::BaseModel
|
|
@@ -844,6 +2437,190 @@ module Revox
|
|
|
844
2437
|
end
|
|
845
2438
|
end
|
|
846
2439
|
|
|
2440
|
+
class SttContext < Revox::Internal::Type::BaseModel
|
|
2441
|
+
OrHash =
|
|
2442
|
+
T.type_alias do
|
|
2443
|
+
T.any(
|
|
2444
|
+
Revox::AssistantUpdateParams::SttContext,
|
|
2445
|
+
Revox::Internal::AnyHash
|
|
2446
|
+
)
|
|
2447
|
+
end
|
|
2448
|
+
|
|
2449
|
+
sig do
|
|
2450
|
+
returns(T::Array[Revox::AssistantUpdateParams::SttContext::General])
|
|
2451
|
+
end
|
|
2452
|
+
attr_accessor :general
|
|
2453
|
+
|
|
2454
|
+
sig { returns(T::Array[String]) }
|
|
2455
|
+
attr_accessor :terms
|
|
2456
|
+
|
|
2457
|
+
# Assistant-level speech-to-text context: structured `general` key/value pairs
|
|
2458
|
+
# plus a list of domain `terms`. Prompt-derived context is merged in without
|
|
2459
|
+
# replacing existing entries.
|
|
2460
|
+
sig do
|
|
2461
|
+
params(
|
|
2462
|
+
general:
|
|
2463
|
+
T::Array[
|
|
2464
|
+
Revox::AssistantUpdateParams::SttContext::General::OrHash
|
|
2465
|
+
],
|
|
2466
|
+
terms: T::Array[String]
|
|
2467
|
+
).returns(T.attached_class)
|
|
2468
|
+
end
|
|
2469
|
+
def self.new(general:, terms:)
|
|
2470
|
+
end
|
|
2471
|
+
|
|
2472
|
+
sig do
|
|
2473
|
+
override.returns(
|
|
2474
|
+
{
|
|
2475
|
+
general:
|
|
2476
|
+
T::Array[Revox::AssistantUpdateParams::SttContext::General],
|
|
2477
|
+
terms: T::Array[String]
|
|
2478
|
+
}
|
|
2479
|
+
)
|
|
2480
|
+
end
|
|
2481
|
+
def to_hash
|
|
2482
|
+
end
|
|
2483
|
+
|
|
2484
|
+
class General < Revox::Internal::Type::BaseModel
|
|
2485
|
+
OrHash =
|
|
2486
|
+
T.type_alias do
|
|
2487
|
+
T.any(
|
|
2488
|
+
Revox::AssistantUpdateParams::SttContext::General,
|
|
2489
|
+
Revox::Internal::AnyHash
|
|
2490
|
+
)
|
|
2491
|
+
end
|
|
2492
|
+
|
|
2493
|
+
sig { returns(String) }
|
|
2494
|
+
attr_accessor :key
|
|
2495
|
+
|
|
2496
|
+
sig { returns(String) }
|
|
2497
|
+
attr_accessor :value
|
|
2498
|
+
|
|
2499
|
+
sig { params(key: String, value: String).returns(T.attached_class) }
|
|
2500
|
+
def self.new(key:, value:)
|
|
2501
|
+
end
|
|
2502
|
+
|
|
2503
|
+
sig { override.returns({ key: String, value: String }) }
|
|
2504
|
+
def to_hash
|
|
2505
|
+
end
|
|
2506
|
+
end
|
|
2507
|
+
end
|
|
2508
|
+
|
|
2509
|
+
# Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
|
|
2510
|
+
# when omitted.
|
|
2511
|
+
module SttModel
|
|
2512
|
+
extend Revox::Internal::Type::Enum
|
|
2513
|
+
|
|
2514
|
+
TaggedSymbol =
|
|
2515
|
+
T.type_alias { T.all(Symbol, Revox::AssistantUpdateParams::SttModel) }
|
|
2516
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2517
|
+
|
|
2518
|
+
STT_RT_V4 =
|
|
2519
|
+
T.let(
|
|
2520
|
+
:"stt-rt-v4",
|
|
2521
|
+
Revox::AssistantUpdateParams::SttModel::TaggedSymbol
|
|
2522
|
+
)
|
|
2523
|
+
STT_RT_V5 =
|
|
2524
|
+
T.let(
|
|
2525
|
+
:"stt-rt-v5",
|
|
2526
|
+
Revox::AssistantUpdateParams::SttModel::TaggedSymbol
|
|
2527
|
+
)
|
|
2528
|
+
|
|
2529
|
+
sig do
|
|
2530
|
+
override.returns(
|
|
2531
|
+
T::Array[Revox::AssistantUpdateParams::SttModel::TaggedSymbol]
|
|
2532
|
+
)
|
|
2533
|
+
end
|
|
2534
|
+
def self.values
|
|
2535
|
+
end
|
|
2536
|
+
end
|
|
2537
|
+
|
|
2538
|
+
# Audio clip to play while the agent is processing a response. One of the built-in
|
|
2539
|
+
# LiveKit audio clips; null/omitted disables it.
|
|
2540
|
+
module ThinkingSound
|
|
2541
|
+
extend Revox::Internal::Type::Enum
|
|
2542
|
+
|
|
2543
|
+
TaggedSymbol =
|
|
2544
|
+
T.type_alias do
|
|
2545
|
+
T.all(Symbol, Revox::AssistantUpdateParams::ThinkingSound)
|
|
2546
|
+
end
|
|
2547
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2548
|
+
|
|
2549
|
+
CITY_AMBIENCE_OGG =
|
|
2550
|
+
T.let(
|
|
2551
|
+
:"city-ambience.ogg",
|
|
2552
|
+
Revox::AssistantUpdateParams::ThinkingSound::TaggedSymbol
|
|
2553
|
+
)
|
|
2554
|
+
FOREST_AMBIENCE_OGG =
|
|
2555
|
+
T.let(
|
|
2556
|
+
:"forest-ambience.ogg",
|
|
2557
|
+
Revox::AssistantUpdateParams::ThinkingSound::TaggedSymbol
|
|
2558
|
+
)
|
|
2559
|
+
OFFICE_AMBIENCE_OGG =
|
|
2560
|
+
T.let(
|
|
2561
|
+
:"office-ambience.ogg",
|
|
2562
|
+
Revox::AssistantUpdateParams::ThinkingSound::TaggedSymbol
|
|
2563
|
+
)
|
|
2564
|
+
CROWDED_ROOM_OGG =
|
|
2565
|
+
T.let(
|
|
2566
|
+
:"crowded-room.ogg",
|
|
2567
|
+
Revox::AssistantUpdateParams::ThinkingSound::TaggedSymbol
|
|
2568
|
+
)
|
|
2569
|
+
KEYBOARD_TYPING_OGG =
|
|
2570
|
+
T.let(
|
|
2571
|
+
:"keyboard-typing.ogg",
|
|
2572
|
+
Revox::AssistantUpdateParams::ThinkingSound::TaggedSymbol
|
|
2573
|
+
)
|
|
2574
|
+
KEYBOARD_TYPING2_OGG =
|
|
2575
|
+
T.let(
|
|
2576
|
+
:"keyboard-typing2.ogg",
|
|
2577
|
+
Revox::AssistantUpdateParams::ThinkingSound::TaggedSymbol
|
|
2578
|
+
)
|
|
2579
|
+
HOLD_MUSIC_OGG =
|
|
2580
|
+
T.let(
|
|
2581
|
+
:"hold_music.ogg",
|
|
2582
|
+
Revox::AssistantUpdateParams::ThinkingSound::TaggedSymbol
|
|
2583
|
+
)
|
|
2584
|
+
|
|
2585
|
+
sig do
|
|
2586
|
+
override.returns(
|
|
2587
|
+
T::Array[Revox::AssistantUpdateParams::ThinkingSound::TaggedSymbol]
|
|
2588
|
+
)
|
|
2589
|
+
end
|
|
2590
|
+
def self.values
|
|
2591
|
+
end
|
|
2592
|
+
end
|
|
2593
|
+
|
|
2594
|
+
# Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
|
|
2595
|
+
# orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
|
|
2596
|
+
# multi-step flow (hidden from the assistants list). Flow transitions are managed
|
|
2597
|
+
# via the /assistants/:id/edges endpoints, not on the assistant itself.
|
|
2598
|
+
module Type
|
|
2599
|
+
extend Revox::Internal::Type::Enum
|
|
2600
|
+
|
|
2601
|
+
TaggedSymbol =
|
|
2602
|
+
T.type_alias { T.all(Symbol, Revox::AssistantUpdateParams::Type) }
|
|
2603
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2604
|
+
|
|
2605
|
+
STANDALONE =
|
|
2606
|
+
T.let(:standalone, Revox::AssistantUpdateParams::Type::TaggedSymbol)
|
|
2607
|
+
MULTI_STEP =
|
|
2608
|
+
T.let(:"multi-step", Revox::AssistantUpdateParams::Type::TaggedSymbol)
|
|
2609
|
+
SUB_ASSISTANT =
|
|
2610
|
+
T.let(
|
|
2611
|
+
:"sub-assistant",
|
|
2612
|
+
Revox::AssistantUpdateParams::Type::TaggedSymbol
|
|
2613
|
+
)
|
|
2614
|
+
|
|
2615
|
+
sig do
|
|
2616
|
+
override.returns(
|
|
2617
|
+
T::Array[Revox::AssistantUpdateParams::Type::TaggedSymbol]
|
|
2618
|
+
)
|
|
2619
|
+
end
|
|
2620
|
+
def self.values
|
|
2621
|
+
end
|
|
2622
|
+
end
|
|
2623
|
+
|
|
847
2624
|
class Voice < Revox::Internal::Type::BaseModel
|
|
848
2625
|
OrHash =
|
|
849
2626
|
T.type_alias do
|
|
@@ -858,6 +2635,22 @@ module Revox
|
|
|
858
2635
|
sig { returns(Revox::AssistantUpdateParams::Voice::Provider::OrSymbol) }
|
|
859
2636
|
attr_accessor :provider
|
|
860
2637
|
|
|
2638
|
+
# Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
|
|
2639
|
+
# for other providers.
|
|
2640
|
+
sig do
|
|
2641
|
+
returns(
|
|
2642
|
+
T.nilable(Revox::AssistantUpdateParams::Voice::Model::OrSymbol)
|
|
2643
|
+
)
|
|
2644
|
+
end
|
|
2645
|
+
attr_reader :model
|
|
2646
|
+
|
|
2647
|
+
sig do
|
|
2648
|
+
params(
|
|
2649
|
+
model: Revox::AssistantUpdateParams::Voice::Model::OrSymbol
|
|
2650
|
+
).void
|
|
2651
|
+
end
|
|
2652
|
+
attr_writer :model
|
|
2653
|
+
|
|
861
2654
|
# The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
|
|
862
2655
|
# 0.7–1.2. Default is 1.0.
|
|
863
2656
|
sig { returns(T.nilable(Float)) }
|
|
@@ -866,13 +2659,23 @@ module Revox
|
|
|
866
2659
|
sig { params(speed: Float).void }
|
|
867
2660
|
attr_writer :speed
|
|
868
2661
|
|
|
2662
|
+
# Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
|
|
2663
|
+
# providers.
|
|
2664
|
+
sig { returns(T.nilable(Float)) }
|
|
2665
|
+
attr_reader :volume
|
|
2666
|
+
|
|
2667
|
+
sig { params(volume: Float).void }
|
|
2668
|
+
attr_writer :volume
|
|
2669
|
+
|
|
869
2670
|
# The voice to use for the call. You can get the list of voices using the /voices
|
|
870
2671
|
# endpoint
|
|
871
2672
|
sig do
|
|
872
2673
|
params(
|
|
873
2674
|
id: String,
|
|
874
2675
|
provider: Revox::AssistantUpdateParams::Voice::Provider::OrSymbol,
|
|
875
|
-
|
|
2676
|
+
model: Revox::AssistantUpdateParams::Voice::Model::OrSymbol,
|
|
2677
|
+
speed: Float,
|
|
2678
|
+
volume: Float
|
|
876
2679
|
).returns(T.attached_class)
|
|
877
2680
|
end
|
|
878
2681
|
def self.new(
|
|
@@ -880,9 +2683,15 @@ module Revox
|
|
|
880
2683
|
id:,
|
|
881
2684
|
# The provider of the voice.
|
|
882
2685
|
provider:,
|
|
2686
|
+
# Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
|
|
2687
|
+
# for other providers.
|
|
2688
|
+
model: nil,
|
|
883
2689
|
# The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
|
|
884
2690
|
# 0.7–1.2. Default is 1.0.
|
|
885
|
-
speed: nil
|
|
2691
|
+
speed: nil,
|
|
2692
|
+
# Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
|
|
2693
|
+
# providers.
|
|
2694
|
+
volume: nil
|
|
886
2695
|
)
|
|
887
2696
|
end
|
|
888
2697
|
|
|
@@ -891,7 +2700,9 @@ module Revox
|
|
|
891
2700
|
{
|
|
892
2701
|
id: String,
|
|
893
2702
|
provider: Revox::AssistantUpdateParams::Voice::Provider::OrSymbol,
|
|
894
|
-
|
|
2703
|
+
model: Revox::AssistantUpdateParams::Voice::Model::OrSymbol,
|
|
2704
|
+
speed: Float,
|
|
2705
|
+
volume: Float
|
|
895
2706
|
}
|
|
896
2707
|
)
|
|
897
2708
|
end
|
|
@@ -929,6 +2740,234 @@ module Revox
|
|
|
929
2740
|
def self.values
|
|
930
2741
|
end
|
|
931
2742
|
end
|
|
2743
|
+
|
|
2744
|
+
# Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
|
|
2745
|
+
# for other providers.
|
|
2746
|
+
module Model
|
|
2747
|
+
extend Revox::Internal::Type::Enum
|
|
2748
|
+
|
|
2749
|
+
TaggedSymbol =
|
|
2750
|
+
T.type_alias do
|
|
2751
|
+
T.all(Symbol, Revox::AssistantUpdateParams::Voice::Model)
|
|
2752
|
+
end
|
|
2753
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2754
|
+
|
|
2755
|
+
SONIC_3 =
|
|
2756
|
+
T.let(
|
|
2757
|
+
:"sonic-3",
|
|
2758
|
+
Revox::AssistantUpdateParams::Voice::Model::TaggedSymbol
|
|
2759
|
+
)
|
|
2760
|
+
SONIC_3_5 =
|
|
2761
|
+
T.let(
|
|
2762
|
+
:"sonic-3.5",
|
|
2763
|
+
Revox::AssistantUpdateParams::Voice::Model::TaggedSymbol
|
|
2764
|
+
)
|
|
2765
|
+
|
|
2766
|
+
sig do
|
|
2767
|
+
override.returns(
|
|
2768
|
+
T::Array[Revox::AssistantUpdateParams::Voice::Model::TaggedSymbol]
|
|
2769
|
+
)
|
|
2770
|
+
end
|
|
2771
|
+
def self.values
|
|
2772
|
+
end
|
|
2773
|
+
end
|
|
2774
|
+
end
|
|
2775
|
+
|
|
2776
|
+
class Zoho < Revox::Internal::Type::BaseModel
|
|
2777
|
+
OrHash =
|
|
2778
|
+
T.type_alias do
|
|
2779
|
+
T.any(Revox::AssistantUpdateParams::Zoho, Revox::Internal::AnyHash)
|
|
2780
|
+
end
|
|
2781
|
+
|
|
2782
|
+
# The Nango connection ID linking the org's Zoho CRM account to Revox.
|
|
2783
|
+
sig { returns(String) }
|
|
2784
|
+
attr_accessor :connection_id
|
|
2785
|
+
|
|
2786
|
+
# Maps extracted call fields (structured_output / prompt variables) onto Zoho
|
|
2787
|
+
# field API names on the upserted record.
|
|
2788
|
+
sig do
|
|
2789
|
+
returns(T::Array[Revox::AssistantUpdateParams::Zoho::FieldMapping])
|
|
2790
|
+
end
|
|
2791
|
+
attr_accessor :field_mapping
|
|
2792
|
+
|
|
2793
|
+
# When true, also log the call as a record in Zoho's Calls module (related to the
|
|
2794
|
+
# upserted prospect via Who_Id).
|
|
2795
|
+
sig { returns(T::Boolean) }
|
|
2796
|
+
attr_accessor :log_call_activity
|
|
2797
|
+
|
|
2798
|
+
# Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
|
|
2799
|
+
sig { returns(String) }
|
|
2800
|
+
attr_accessor :module_
|
|
2801
|
+
|
|
2802
|
+
# Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
|
|
2803
|
+
# 'none' to push when outcome is null.
|
|
2804
|
+
sig do
|
|
2805
|
+
returns(
|
|
2806
|
+
T::Array[Revox::AssistantUpdateParams::Zoho::Outcome::OrSymbol]
|
|
2807
|
+
)
|
|
2808
|
+
end
|
|
2809
|
+
attr_accessor :outcomes
|
|
2810
|
+
|
|
2811
|
+
# Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
2812
|
+
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
|
|
2813
|
+
# prompt_variables and structured_output keys. When null/empty a default note
|
|
2814
|
+
# (outcome + summary + auto-listed extracted fields) is used.
|
|
2815
|
+
sig { returns(T.nilable(String)) }
|
|
2816
|
+
attr_accessor :template
|
|
2817
|
+
|
|
2818
|
+
# Zoho CRM integration config. When set, upserts the prospect (keyed on phone)
|
|
2819
|
+
# into the chosen module and attaches a Note with the call summary after a call
|
|
2820
|
+
# ends with one of the configured outcomes.
|
|
2821
|
+
sig do
|
|
2822
|
+
params(
|
|
2823
|
+
connection_id: String,
|
|
2824
|
+
field_mapping:
|
|
2825
|
+
T::Array[
|
|
2826
|
+
Revox::AssistantUpdateParams::Zoho::FieldMapping::OrHash
|
|
2827
|
+
],
|
|
2828
|
+
log_call_activity: T::Boolean,
|
|
2829
|
+
module_: String,
|
|
2830
|
+
outcomes:
|
|
2831
|
+
T::Array[Revox::AssistantUpdateParams::Zoho::Outcome::OrSymbol],
|
|
2832
|
+
template: T.nilable(String)
|
|
2833
|
+
).returns(T.attached_class)
|
|
2834
|
+
end
|
|
2835
|
+
def self.new(
|
|
2836
|
+
# The Nango connection ID linking the org's Zoho CRM account to Revox.
|
|
2837
|
+
connection_id:,
|
|
2838
|
+
# Maps extracted call fields (structured_output / prompt variables) onto Zoho
|
|
2839
|
+
# field API names on the upserted record.
|
|
2840
|
+
field_mapping:,
|
|
2841
|
+
# When true, also log the call as a record in Zoho's Calls module (related to the
|
|
2842
|
+
# upserted prospect via Who_Id).
|
|
2843
|
+
log_call_activity:,
|
|
2844
|
+
# Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
|
|
2845
|
+
module_:,
|
|
2846
|
+
# Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
|
|
2847
|
+
# 'none' to push when outcome is null.
|
|
2848
|
+
outcomes:,
|
|
2849
|
+
# Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
|
|
2850
|
+
# {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
|
|
2851
|
+
# prompt_variables and structured_output keys. When null/empty a default note
|
|
2852
|
+
# (outcome + summary + auto-listed extracted fields) is used.
|
|
2853
|
+
template: nil
|
|
2854
|
+
)
|
|
2855
|
+
end
|
|
2856
|
+
|
|
2857
|
+
sig do
|
|
2858
|
+
override.returns(
|
|
2859
|
+
{
|
|
2860
|
+
connection_id: String,
|
|
2861
|
+
field_mapping:
|
|
2862
|
+
T::Array[Revox::AssistantUpdateParams::Zoho::FieldMapping],
|
|
2863
|
+
log_call_activity: T::Boolean,
|
|
2864
|
+
module_: String,
|
|
2865
|
+
outcomes:
|
|
2866
|
+
T::Array[Revox::AssistantUpdateParams::Zoho::Outcome::OrSymbol],
|
|
2867
|
+
template: T.nilable(String)
|
|
2868
|
+
}
|
|
2869
|
+
)
|
|
2870
|
+
end
|
|
2871
|
+
def to_hash
|
|
2872
|
+
end
|
|
2873
|
+
|
|
2874
|
+
class FieldMapping < Revox::Internal::Type::BaseModel
|
|
2875
|
+
OrHash =
|
|
2876
|
+
T.type_alias do
|
|
2877
|
+
T.any(
|
|
2878
|
+
Revox::AssistantUpdateParams::Zoho::FieldMapping,
|
|
2879
|
+
Revox::Internal::AnyHash
|
|
2880
|
+
)
|
|
2881
|
+
end
|
|
2882
|
+
|
|
2883
|
+
# Source key to read from the call: a structured_output field name, falling back
|
|
2884
|
+
# to a prompt variable of the same name.
|
|
2885
|
+
sig { returns(String) }
|
|
2886
|
+
attr_accessor :source
|
|
2887
|
+
|
|
2888
|
+
# Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
|
|
2889
|
+
# or a custom 'Budget\_\_c').
|
|
2890
|
+
sig { returns(String) }
|
|
2891
|
+
attr_accessor :zoho_field
|
|
2892
|
+
|
|
2893
|
+
sig do
|
|
2894
|
+
params(source: String, zoho_field: String).returns(T.attached_class)
|
|
2895
|
+
end
|
|
2896
|
+
def self.new(
|
|
2897
|
+
# Source key to read from the call: a structured_output field name, falling back
|
|
2898
|
+
# to a prompt variable of the same name.
|
|
2899
|
+
source:,
|
|
2900
|
+
# Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
|
|
2901
|
+
# or a custom 'Budget\_\_c').
|
|
2902
|
+
zoho_field:
|
|
2903
|
+
)
|
|
2904
|
+
end
|
|
2905
|
+
|
|
2906
|
+
sig { override.returns({ source: String, zoho_field: String }) }
|
|
2907
|
+
def to_hash
|
|
2908
|
+
end
|
|
2909
|
+
end
|
|
2910
|
+
|
|
2911
|
+
module Outcome
|
|
2912
|
+
extend Revox::Internal::Type::Enum
|
|
2913
|
+
|
|
2914
|
+
TaggedSymbol =
|
|
2915
|
+
T.type_alias do
|
|
2916
|
+
T.all(Symbol, Revox::AssistantUpdateParams::Zoho::Outcome)
|
|
2917
|
+
end
|
|
2918
|
+
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
2919
|
+
|
|
2920
|
+
NOT_INTERESTED =
|
|
2921
|
+
T.let(
|
|
2922
|
+
:not_interested,
|
|
2923
|
+
Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
|
|
2924
|
+
)
|
|
2925
|
+
INTERESTED =
|
|
2926
|
+
T.let(
|
|
2927
|
+
:interested,
|
|
2928
|
+
Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
|
|
2929
|
+
)
|
|
2930
|
+
COMPLETED =
|
|
2931
|
+
T.let(
|
|
2932
|
+
:completed,
|
|
2933
|
+
Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
|
|
2934
|
+
)
|
|
2935
|
+
REQUESTED_CALLBACK_LATER =
|
|
2936
|
+
T.let(
|
|
2937
|
+
:requested_callback_later,
|
|
2938
|
+
Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
|
|
2939
|
+
)
|
|
2940
|
+
REQUESTED_CALLBACK_NEW_NUMBER =
|
|
2941
|
+
T.let(
|
|
2942
|
+
:requested_callback_new_number,
|
|
2943
|
+
Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
|
|
2944
|
+
)
|
|
2945
|
+
DO_NOT_CONTACT =
|
|
2946
|
+
T.let(
|
|
2947
|
+
:do_not_contact,
|
|
2948
|
+
Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
|
|
2949
|
+
)
|
|
2950
|
+
AI_AVERSE =
|
|
2951
|
+
T.let(
|
|
2952
|
+
:ai_averse,
|
|
2953
|
+
Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
|
|
2954
|
+
)
|
|
2955
|
+
NONE =
|
|
2956
|
+
T.let(
|
|
2957
|
+
:none,
|
|
2958
|
+
Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
|
|
2959
|
+
)
|
|
2960
|
+
|
|
2961
|
+
sig do
|
|
2962
|
+
override.returns(
|
|
2963
|
+
T::Array[
|
|
2964
|
+
Revox::AssistantUpdateParams::Zoho::Outcome::TaggedSymbol
|
|
2965
|
+
]
|
|
2966
|
+
)
|
|
2967
|
+
end
|
|
2968
|
+
def self.values
|
|
2969
|
+
end
|
|
2970
|
+
end
|
|
932
2971
|
end
|
|
933
2972
|
end
|
|
934
2973
|
end
|