revox 0.1.0 → 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 +71 -0
- data/README.md +39 -14
- data/lib/revox/client.rb +15 -1
- data/lib/revox/internal/transport/base_client.rb +5 -0
- data/lib/revox/internal/util.rb +22 -7
- data/lib/revox/models/assistant_create_params.rb +1038 -13
- data/lib/revox/models/assistant_create_response.rb +1071 -11
- data/lib/revox/models/assistant_list_response.rb +1070 -11
- data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
- data/lib/revox/models/assistant_update_params.rb +1038 -13
- data/lib/revox/models/assistant_update_response.rb +1097 -12
- data/lib/revox/models/call_create_params.rb +1065 -13
- data/lib/revox/models/call_create_response.rb +1813 -101
- data/lib/revox/models/call_retrieve_response.rb +1815 -101
- data/lib/revox/models/campaign_create_params.rb +67 -2
- data/lib/revox/models/campaign_create_response.rb +1314 -59
- data/lib/revox/models/campaign_get_rows_params.rb +1 -46
- data/lib/revox/models/campaign_get_rows_response.rb +1837 -129
- data/lib/revox/models/campaign_list_response.rb +1312 -59
- data/lib/revox/models/campaign_retrieve_response.rb +1312 -56
- 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 +49 -1
- data/lib/revox/models.rb +0 -2
- data/lib/revox/resources/assistants.rb +116 -8
- data/lib/revox/resources/call.rb +0 -29
- data/lib/revox/resources/campaigns.rb +12 -17
- data/lib/revox/resources/voices.rb +16 -10
- data/lib/revox/version.rb +1 -1
- data/lib/revox.rb +0 -2
- data/rbi/revox/internal/util.rbi +8 -0
- data/rbi/revox/models/assistant_create_params.rbi +2138 -103
- data/rbi/revox/models/assistant_create_response.rbi +2454 -199
- data/rbi/revox/models/assistant_list_response.rbi +2448 -195
- data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
- data/rbi/revox/models/assistant_update_params.rbi +2138 -103
- data/rbi/revox/models/assistant_update_response.rbi +2504 -198
- data/rbi/revox/models/call_create_params.rbi +2382 -225
- data/rbi/revox/models/call_create_response.rbi +4104 -384
- data/rbi/revox/models/call_retrieve_response.rbi +4104 -382
- data/rbi/revox/models/campaign_create_params.rbi +136 -0
- data/rbi/revox/models/campaign_create_response.rbi +2911 -231
- data/rbi/revox/models/campaign_get_rows_params.rbi +2 -82
- data/rbi/revox/models/campaign_get_rows_response.rbi +4135 -410
- data/rbi/revox/models/campaign_list_response.rbi +2904 -230
- data/rbi/revox/models/campaign_retrieve_response.rbi +2911 -231
- 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 +69 -0
- data/rbi/revox/models.rbi +0 -2
- data/rbi/revox/resources/assistants.rbi +284 -8
- data/rbi/revox/resources/call.rbi +0 -21
- data/rbi/revox/resources/campaigns.rbi +12 -19
- data/rbi/revox/resources/voices.rbi +17 -9
- data/sig/revox/internal/util.rbs +4 -0
- data/sig/revox/models/assistant_create_params.rbs +844 -11
- data/sig/revox/models/assistant_create_response.rbs +860 -3
- data/sig/revox/models/assistant_list_response.rbs +860 -3
- data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
- data/sig/revox/models/assistant_update_params.rbs +844 -11
- data/sig/revox/models/assistant_update_response.rbs +886 -6
- data/sig/revox/models/call_create_params.rbs +847 -13
- data/sig/revox/models/call_create_response.rbs +1514 -34
- data/sig/revox/models/call_retrieve_response.rbs +1514 -34
- data/sig/revox/models/campaign_create_params.rbs +54 -0
- data/sig/revox/models/campaign_create_response.rbs +1034 -6
- data/sig/revox/models/campaign_get_rows_params.rbs +2 -64
- data/sig/revox/models/campaign_get_rows_response.rbs +1522 -54
- data/sig/revox/models/campaign_list_response.rbs +1034 -6
- data/sig/revox/models/campaign_retrieve_response.rbs +1034 -6
- 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 +42 -1
- data/sig/revox/models.rbs +0 -2
- data/sig/revox/resources/assistants.rbs +56 -2
- data/sig/revox/resources/call.rbs +0 -7
- data/sig/revox/resources/campaigns.rbs +2 -5
- data/sig/revox/resources/voices.rbs +4 -0
- metadata +2 -8
- data/lib/revox/models/call_list_params.rb +0 -52
- data/lib/revox/models/call_list_response.rb +0 -259
- data/rbi/revox/models/call_list_params.rbi +0 -94
- data/rbi/revox/models/call_list_response.rbi +0 -563
- data/sig/revox/models/call_list_params.rbs +0 -63
- data/sig/revox/models/call_list_response.rbs +0 -226
|
@@ -14,8 +14,26 @@ module Revox
|
|
|
14
14
|
sig { returns(String) }
|
|
15
15
|
attr_accessor :id
|
|
16
16
|
|
|
17
|
-
#
|
|
18
|
-
#
|
|
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.
|
|
19
37
|
sig do
|
|
20
38
|
returns(
|
|
21
39
|
T.nilable(Revox::AssistantUpdateParams::BackgroundSound::OrSymbol)
|
|
@@ -23,11 +41,20 @@ module Revox
|
|
|
23
41
|
end
|
|
24
42
|
attr_accessor :background_sound
|
|
25
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
|
+
|
|
26
51
|
sig { returns(T.nilable(Revox::AssistantUpdateParams::Calendly)) }
|
|
27
52
|
attr_reader :calendly
|
|
28
53
|
|
|
29
54
|
sig do
|
|
30
|
-
params(
|
|
55
|
+
params(
|
|
56
|
+
calendly: T.nilable(Revox::AssistantUpdateParams::Calendly::OrHash)
|
|
57
|
+
).void
|
|
31
58
|
end
|
|
32
59
|
attr_writer :calendly
|
|
33
60
|
|
|
@@ -44,6 +71,56 @@ module Revox
|
|
|
44
71
|
end
|
|
45
72
|
attr_writer :call_retry_config
|
|
46
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
|
+
|
|
47
124
|
# Optional message to say when the agent decides to end the call.
|
|
48
125
|
sig { returns(T.nilable(String)) }
|
|
49
126
|
attr_reader :end_of_call_sentence
|
|
@@ -98,6 +175,21 @@ module Revox
|
|
|
98
175
|
end
|
|
99
176
|
attr_writer :first_sentence_mode
|
|
100
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
|
+
|
|
101
193
|
# Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
|
|
102
194
|
# skip turns to navigate phone menus.
|
|
103
195
|
sig { returns(T.nilable(T::Boolean)) }
|
|
@@ -111,7 +203,9 @@ module Revox
|
|
|
111
203
|
T.nilable(
|
|
112
204
|
T.any(
|
|
113
205
|
Revox::AssistantUpdateParams::LlmModel::UnionMember0,
|
|
114
|
-
Revox::AssistantUpdateParams::LlmModel::UnionMember1
|
|
206
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1,
|
|
207
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2,
|
|
208
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3
|
|
115
209
|
)
|
|
116
210
|
)
|
|
117
211
|
)
|
|
@@ -123,12 +217,19 @@ module Revox
|
|
|
123
217
|
llm_model:
|
|
124
218
|
T.any(
|
|
125
219
|
Revox::AssistantUpdateParams::LlmModel::UnionMember0::OrHash,
|
|
126
|
-
Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash
|
|
220
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash,
|
|
221
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2::OrHash,
|
|
222
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::OrHash
|
|
127
223
|
)
|
|
128
224
|
).void
|
|
129
225
|
end
|
|
130
226
|
attr_writer :llm_model
|
|
131
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
|
+
|
|
132
233
|
# The maximum duration of the call in seconds. This is the maximum time the call
|
|
133
234
|
# will be allowed to run.
|
|
134
235
|
sig { returns(T.nilable(Float)) }
|
|
@@ -137,12 +238,29 @@ module Revox
|
|
|
137
238
|
sig { params(max_call_duration_secs: Float).void }
|
|
138
239
|
attr_writer :max_call_duration_secs
|
|
139
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
|
+
|
|
140
247
|
sig { returns(T.nilable(String)) }
|
|
141
248
|
attr_reader :name
|
|
142
249
|
|
|
143
250
|
sig { params(name: String).void }
|
|
144
251
|
attr_writer :name
|
|
145
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
|
+
|
|
146
264
|
# The prompt to use for the call. This will be given to the LLM (gpt-4.1)
|
|
147
265
|
sig { returns(T.nilable(String)) }
|
|
148
266
|
attr_reader :prompt
|
|
@@ -150,6 +268,46 @@ module Revox
|
|
|
150
268
|
sig { params(prompt: String).void }
|
|
151
269
|
attr_writer :prompt
|
|
152
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
|
+
|
|
153
311
|
# The structured output config to use for the call. This is used to extract the
|
|
154
312
|
# data from the call (like email, name, company name, etc.).
|
|
155
313
|
sig do
|
|
@@ -171,11 +329,77 @@ module Revox
|
|
|
171
329
|
end
|
|
172
330
|
attr_writer :structured_output_config
|
|
173
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
|
+
|
|
174
388
|
# Phone number to transfer calls to when users request to speak to a human agent
|
|
175
389
|
# in E.164 format (e.g. +1234567890).
|
|
176
390
|
sig { returns(T.nilable(String)) }
|
|
177
391
|
attr_accessor :transfer_phone_number
|
|
178
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
|
+
|
|
179
403
|
# The voice to use for the call. You can get the list of voices using the /voices
|
|
180
404
|
# endpoint
|
|
181
405
|
sig { returns(T.nilable(Revox::AssistantUpdateParams::Voice)) }
|
|
@@ -189,6 +413,17 @@ module Revox
|
|
|
189
413
|
sig { returns(T.nilable(String)) }
|
|
190
414
|
attr_accessor :voicemail_message
|
|
191
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
|
+
|
|
192
427
|
# The webhook URL to call when the call is completed.
|
|
193
428
|
sig { returns(T.nilable(String)) }
|
|
194
429
|
attr_reader :webhook_url
|
|
@@ -196,49 +431,133 @@ module Revox
|
|
|
196
431
|
sig { params(webhook_url: String).void }
|
|
197
432
|
attr_writer :webhook_url
|
|
198
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
|
+
|
|
199
445
|
sig do
|
|
200
446
|
params(
|
|
201
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),
|
|
202
455
|
background_sound:
|
|
203
456
|
T.nilable(Revox::AssistantUpdateParams::BackgroundSound::OrSymbol),
|
|
204
|
-
|
|
457
|
+
background_sound_volume: Float,
|
|
458
|
+
calendly: T.nilable(Revox::AssistantUpdateParams::Calendly::OrHash),
|
|
205
459
|
call_retry_config:
|
|
206
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
|
+
),
|
|
207
475
|
end_of_call_sentence: String,
|
|
208
476
|
faq_items: T::Array[Revox::AssistantUpdateParams::FaqItem::OrHash],
|
|
209
477
|
first_sentence: String,
|
|
210
478
|
first_sentence_delay_ms: Integer,
|
|
211
479
|
first_sentence_mode:
|
|
212
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
|
+
),
|
|
213
486
|
ivr_navigation_enabled: T::Boolean,
|
|
214
487
|
llm_model:
|
|
215
488
|
T.any(
|
|
216
489
|
Revox::AssistantUpdateParams::LlmModel::UnionMember0::OrHash,
|
|
217
|
-
Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash
|
|
490
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash,
|
|
491
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2::OrHash,
|
|
492
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::OrHash
|
|
218
493
|
),
|
|
494
|
+
logo_url: T.nilable(String),
|
|
219
495
|
max_call_duration_secs: Float,
|
|
496
|
+
max_duration_end_message: T.nilable(String),
|
|
220
497
|
name: String,
|
|
498
|
+
position: T.nilable(Revox::AssistantUpdateParams::Position::OrHash),
|
|
221
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),
|
|
222
505
|
structured_output_config:
|
|
223
506
|
T::Array[
|
|
224
507
|
Revox::AssistantUpdateParams::StructuredOutputConfig::OrHash
|
|
225
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,
|
|
226
517
|
transfer_phone_number: T.nilable(String),
|
|
518
|
+
type: Revox::AssistantUpdateParams::Type::OrSymbol,
|
|
227
519
|
voice: Revox::AssistantUpdateParams::Voice::OrHash,
|
|
228
520
|
voicemail_message: T.nilable(String),
|
|
521
|
+
voicemail_sms_prompt: T.nilable(String),
|
|
522
|
+
warm_transfer_summary_instructions: T.nilable(String),
|
|
229
523
|
webhook_url: String,
|
|
524
|
+
zoho: T.nilable(Revox::AssistantUpdateParams::Zoho::OrHash),
|
|
230
525
|
request_options: Revox::RequestOptions::OrHash
|
|
231
526
|
).returns(T.attached_class)
|
|
232
527
|
end
|
|
233
528
|
def self.new(
|
|
234
529
|
id:,
|
|
235
|
-
#
|
|
236
|
-
#
|
|
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.
|
|
237
538
|
background_sound: nil,
|
|
539
|
+
# Volume of the ambient background sound (0 = silent, 1 = max).
|
|
540
|
+
background_sound_volume: nil,
|
|
238
541
|
calendly: nil,
|
|
239
542
|
# Configuration for call retry behavior including time windows, delays, and max
|
|
240
543
|
# iterations. If not provided, defaults will be used.
|
|
241
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,
|
|
242
561
|
# Optional message to say when the agent decides to end the call.
|
|
243
562
|
end_of_call_sentence: nil,
|
|
244
563
|
# FAQ items to associate with this assistant. When provided, replaces all existing
|
|
@@ -253,30 +572,95 @@ module Revox
|
|
|
253
572
|
# first_sentence will be spoken exactly as provided. "none" means the agent will
|
|
254
573
|
# not speak first and will wait for the user.
|
|
255
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,
|
|
256
582
|
# Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
|
|
257
583
|
# skip turns to navigate phone menus.
|
|
258
584
|
ivr_navigation_enabled: nil,
|
|
259
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,
|
|
260
589
|
# The maximum duration of the call in seconds. This is the maximum time the call
|
|
261
590
|
# will be allowed to run.
|
|
262
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,
|
|
263
596
|
name: nil,
|
|
597
|
+
# Canvas position of this assistant's node in its multi-step flow editor.
|
|
598
|
+
position: nil,
|
|
264
599
|
# The prompt to use for the call. This will be given to the LLM (gpt-4.1)
|
|
265
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,
|
|
266
615
|
# The structured output config to use for the call. This is used to extract the
|
|
267
616
|
# data from the call (like email, name, company name, etc.).
|
|
268
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,
|
|
269
637
|
# Phone number to transfer calls to when users request to speak to a human agent
|
|
270
638
|
# in E.164 format (e.g. +1234567890).
|
|
271
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,
|
|
272
645
|
# The voice to use for the call. You can get the list of voices using the /voices
|
|
273
646
|
# endpoint
|
|
274
647
|
voice: nil,
|
|
275
648
|
# If set, when voicemail is detected the agent will speak this message then hang
|
|
276
649
|
# up; if null, hang up immediately.
|
|
277
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,
|
|
278
658
|
# The webhook URL to call when the call is completed.
|
|
279
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,
|
|
280
664
|
request_options: {}
|
|
281
665
|
)
|
|
282
666
|
end
|
|
@@ -285,33 +669,78 @@ module Revox
|
|
|
285
669
|
override.returns(
|
|
286
670
|
{
|
|
287
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),
|
|
288
679
|
background_sound:
|
|
289
680
|
T.nilable(
|
|
290
681
|
Revox::AssistantUpdateParams::BackgroundSound::OrSymbol
|
|
291
682
|
),
|
|
292
|
-
|
|
683
|
+
background_sound_volume: Float,
|
|
684
|
+
calendly: T.nilable(Revox::AssistantUpdateParams::Calendly),
|
|
293
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
|
+
),
|
|
294
698
|
end_of_call_sentence: String,
|
|
295
699
|
faq_items: T::Array[Revox::AssistantUpdateParams::FaqItem],
|
|
296
700
|
first_sentence: String,
|
|
297
701
|
first_sentence_delay_ms: Integer,
|
|
298
702
|
first_sentence_mode:
|
|
299
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
|
+
),
|
|
300
709
|
ivr_navigation_enabled: T::Boolean,
|
|
301
710
|
llm_model:
|
|
302
711
|
T.any(
|
|
303
712
|
Revox::AssistantUpdateParams::LlmModel::UnionMember0,
|
|
304
|
-
Revox::AssistantUpdateParams::LlmModel::UnionMember1
|
|
713
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember1,
|
|
714
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember2,
|
|
715
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3
|
|
305
716
|
),
|
|
717
|
+
logo_url: T.nilable(String),
|
|
306
718
|
max_call_duration_secs: Float,
|
|
719
|
+
max_duration_end_message: T.nilable(String),
|
|
307
720
|
name: String,
|
|
721
|
+
position: T.nilable(Revox::AssistantUpdateParams::Position),
|
|
308
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),
|
|
309
727
|
structured_output_config:
|
|
310
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,
|
|
311
736
|
transfer_phone_number: T.nilable(String),
|
|
737
|
+
type: Revox::AssistantUpdateParams::Type::OrSymbol,
|
|
312
738
|
voice: Revox::AssistantUpdateParams::Voice,
|
|
313
739
|
voicemail_message: T.nilable(String),
|
|
740
|
+
voicemail_sms_prompt: T.nilable(String),
|
|
741
|
+
warm_transfer_summary_instructions: T.nilable(String),
|
|
314
742
|
webhook_url: String,
|
|
743
|
+
zoho: T.nilable(Revox::AssistantUpdateParams::Zoho),
|
|
315
744
|
request_options: Revox::RequestOptions
|
|
316
745
|
}
|
|
317
746
|
)
|
|
@@ -319,8 +748,68 @@ module Revox
|
|
|
319
748
|
def to_hash
|
|
320
749
|
end
|
|
321
750
|
|
|
322
|
-
|
|
323
|
-
|
|
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.
|
|
324
813
|
module BackgroundSound
|
|
325
814
|
extend Revox::Internal::Type::Enum
|
|
326
815
|
|
|
@@ -395,6 +884,24 @@ module Revox
|
|
|
395
884
|
)
|
|
396
885
|
end
|
|
397
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
|
+
|
|
398
905
|
sig do
|
|
399
906
|
returns(
|
|
400
907
|
T::Array[
|
|
@@ -418,6 +925,11 @@ module Revox
|
|
|
418
925
|
# iterations. If not provided, defaults will be used.
|
|
419
926
|
sig do
|
|
420
927
|
params(
|
|
928
|
+
allowed_days:
|
|
929
|
+
T::Array[
|
|
930
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::OrSymbol
|
|
931
|
+
],
|
|
932
|
+
call_twice_in_a_row: T::Boolean,
|
|
421
933
|
calling_windows:
|
|
422
934
|
T::Array[
|
|
423
935
|
Revox::AssistantUpdateParams::CallRetryConfig::CallingWindow::OrHash
|
|
@@ -427,6 +939,14 @@ module Revox
|
|
|
427
939
|
).returns(T.attached_class)
|
|
428
940
|
end
|
|
429
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:,
|
|
430
950
|
calling_windows:,
|
|
431
951
|
# Maximum number of call retry attempts. Default: 3.
|
|
432
952
|
max_retry_attempts:,
|
|
@@ -440,6 +960,11 @@ module Revox
|
|
|
440
960
|
sig do
|
|
441
961
|
override.returns(
|
|
442
962
|
{
|
|
963
|
+
allowed_days:
|
|
964
|
+
T::Array[
|
|
965
|
+
Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay::OrSymbol
|
|
966
|
+
],
|
|
967
|
+
call_twice_in_a_row: T::Boolean,
|
|
443
968
|
calling_windows:
|
|
444
969
|
T::Array[
|
|
445
970
|
Revox::AssistantUpdateParams::CallRetryConfig::CallingWindow
|
|
@@ -452,6 +977,65 @@ module Revox
|
|
|
452
977
|
def to_hash
|
|
453
978
|
end
|
|
454
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
|
+
|
|
455
1039
|
class CallingWindow < Revox::Internal::Type::BaseModel
|
|
456
1040
|
OrHash =
|
|
457
1041
|
T.type_alias do
|
|
@@ -512,54 +1096,498 @@ module Revox
|
|
|
512
1096
|
end
|
|
513
1097
|
end
|
|
514
1098
|
|
|
515
|
-
class
|
|
1099
|
+
class CustomTool < Revox::Internal::Type::BaseModel
|
|
516
1100
|
OrHash =
|
|
517
1101
|
T.type_alias do
|
|
518
1102
|
T.any(
|
|
519
|
-
Revox::AssistantUpdateParams::
|
|
1103
|
+
Revox::AssistantUpdateParams::CustomTool,
|
|
520
1104
|
Revox::Internal::AnyHash
|
|
521
1105
|
)
|
|
522
1106
|
end
|
|
523
1107
|
|
|
524
|
-
|
|
525
|
-
|
|
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
|
|
526
1112
|
|
|
1113
|
+
# Human-readable description of what the tool does, used by the LLM to decide when
|
|
1114
|
+
# to call it
|
|
527
1115
|
sig { returns(String) }
|
|
528
|
-
attr_accessor :
|
|
1116
|
+
attr_accessor :description
|
|
529
1117
|
|
|
1118
|
+
# HTTP headers to include in the request. Values support {{variable}} placeholders
|
|
530
1119
|
sig do
|
|
531
|
-
|
|
532
|
-
end
|
|
533
|
-
def self.new(answer:, question:)
|
|
1120
|
+
returns(T::Array[Revox::AssistantUpdateParams::CustomTool::Header])
|
|
534
1121
|
end
|
|
1122
|
+
attr_accessor :headers
|
|
535
1123
|
|
|
536
|
-
|
|
537
|
-
|
|
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
|
+
)
|
|
538
1130
|
end
|
|
539
|
-
|
|
1131
|
+
attr_accessor :input_schema
|
|
540
1132
|
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
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_
|
|
547
1138
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
end
|
|
552
|
-
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
|
|
553
1142
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
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]
|
|
558
1148
|
)
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
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
|
|
563
1591
|
)
|
|
564
1592
|
NONE =
|
|
565
1593
|
T.let(
|
|
@@ -578,85 +1606,333 @@ module Revox
|
|
|
578
1606
|
end
|
|
579
1607
|
end
|
|
580
1608
|
|
|
581
|
-
|
|
582
|
-
|
|
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
|
|
583
1798
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
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
|
+
}
|
|
589
1835
|
)
|
|
590
1836
|
end
|
|
1837
|
+
def to_hash
|
|
1838
|
+
end
|
|
1839
|
+
end
|
|
591
1840
|
|
|
592
|
-
class
|
|
1841
|
+
class UnionMember3 < Revox::Internal::Type::BaseModel
|
|
593
1842
|
OrHash =
|
|
594
1843
|
T.type_alias do
|
|
595
1844
|
T.any(
|
|
596
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1845
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3,
|
|
597
1846
|
Revox::Internal::AnyHash
|
|
598
1847
|
)
|
|
599
1848
|
end
|
|
600
1849
|
|
|
1850
|
+
# The provider to use from Realtime. eg: openai, google.
|
|
601
1851
|
sig do
|
|
602
1852
|
returns(
|
|
603
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1853
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::OrSymbol
|
|
604
1854
|
)
|
|
605
1855
|
end
|
|
606
|
-
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
|
|
607
1861
|
|
|
1862
|
+
# Use a model from Realtime.
|
|
608
1863
|
sig { returns(Symbol) }
|
|
609
1864
|
attr_accessor :type
|
|
610
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
|
+
|
|
611
1873
|
sig do
|
|
612
1874
|
params(
|
|
613
|
-
|
|
614
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1875
|
+
provider:
|
|
1876
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::OrSymbol,
|
|
1877
|
+
realtime_model_id: String,
|
|
1878
|
+
realtime_voice_id: String,
|
|
615
1879
|
type: Symbol
|
|
616
1880
|
).returns(T.attached_class)
|
|
617
1881
|
end
|
|
618
|
-
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
|
+
)
|
|
619
1892
|
end
|
|
620
1893
|
|
|
621
1894
|
sig do
|
|
622
1895
|
override.returns(
|
|
623
1896
|
{
|
|
624
|
-
|
|
625
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
626
|
-
|
|
1897
|
+
provider:
|
|
1898
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::OrSymbol,
|
|
1899
|
+
realtime_model_id: String,
|
|
1900
|
+
type: Symbol,
|
|
1901
|
+
realtime_voice_id: String
|
|
627
1902
|
}
|
|
628
1903
|
)
|
|
629
1904
|
end
|
|
630
1905
|
def to_hash
|
|
631
1906
|
end
|
|
632
1907
|
|
|
633
|
-
|
|
1908
|
+
# The provider to use from Realtime. eg: openai, google.
|
|
1909
|
+
module Provider
|
|
634
1910
|
extend Revox::Internal::Type::Enum
|
|
635
1911
|
|
|
636
1912
|
TaggedSymbol =
|
|
637
1913
|
T.type_alias do
|
|
638
1914
|
T.all(
|
|
639
1915
|
Symbol,
|
|
640
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1916
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider
|
|
641
1917
|
)
|
|
642
1918
|
end
|
|
643
1919
|
OrSymbol = T.type_alias { T.any(Symbol, String) }
|
|
644
1920
|
|
|
645
|
-
|
|
1921
|
+
OPENAI =
|
|
646
1922
|
T.let(
|
|
647
|
-
:
|
|
648
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1923
|
+
:openai,
|
|
1924
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
649
1925
|
)
|
|
650
|
-
|
|
1926
|
+
GOOGLE =
|
|
651
1927
|
T.let(
|
|
652
|
-
:
|
|
653
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1928
|
+
:google,
|
|
1929
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
654
1930
|
)
|
|
655
1931
|
|
|
656
1932
|
sig do
|
|
657
1933
|
override.returns(
|
|
658
1934
|
T::Array[
|
|
659
|
-
Revox::AssistantUpdateParams::LlmModel::
|
|
1935
|
+
Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider::TaggedSymbol
|
|
660
1936
|
]
|
|
661
1937
|
)
|
|
662
1938
|
end
|
|
@@ -665,64 +1941,377 @@ module Revox
|
|
|
665
1941
|
end
|
|
666
1942
|
end
|
|
667
1943
|
|
|
668
|
-
|
|
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
|
|
669
2023
|
OrHash =
|
|
670
2024
|
T.type_alias do
|
|
671
2025
|
T.any(
|
|
672
|
-
Revox::AssistantUpdateParams::
|
|
2026
|
+
Revox::AssistantUpdateParams::PromptFlow::Edge,
|
|
673
2027
|
Revox::Internal::AnyHash
|
|
674
2028
|
)
|
|
675
2029
|
end
|
|
676
2030
|
|
|
677
|
-
# The model ID to use from OpenRouter. eg: openai/gpt-4.1
|
|
678
2031
|
sig { returns(String) }
|
|
679
|
-
attr_accessor :
|
|
2032
|
+
attr_accessor :id
|
|
680
2033
|
|
|
681
|
-
# The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
|
|
682
2034
|
sig { returns(String) }
|
|
683
|
-
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
|
|
684
2089
|
|
|
685
|
-
# Use a model from OpenRouter.
|
|
686
2090
|
sig { returns(Symbol) }
|
|
687
2091
|
attr_accessor :type
|
|
688
2092
|
|
|
689
2093
|
sig do
|
|
690
2094
|
params(
|
|
691
|
-
|
|
692
|
-
|
|
2095
|
+
id: String,
|
|
2096
|
+
data:
|
|
2097
|
+
Revox::AssistantUpdateParams::PromptFlow::Node::Data::OrHash,
|
|
2098
|
+
position:
|
|
2099
|
+
Revox::AssistantUpdateParams::PromptFlow::Node::Position::OrHash,
|
|
693
2100
|
type: Symbol
|
|
694
2101
|
).returns(T.attached_class)
|
|
695
2102
|
end
|
|
696
|
-
def self.new(
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
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
|
|
704
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
|
+
)
|
|
705
2304
|
|
|
706
2305
|
sig do
|
|
707
2306
|
override.returns(
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
type: Symbol
|
|
712
|
-
}
|
|
2307
|
+
T::Array[
|
|
2308
|
+
Revox::AssistantUpdateParams::Slack::Outcome::TaggedSymbol
|
|
2309
|
+
]
|
|
713
2310
|
)
|
|
714
2311
|
end
|
|
715
|
-
def
|
|
2312
|
+
def self.values
|
|
716
2313
|
end
|
|
717
2314
|
end
|
|
718
|
-
|
|
719
|
-
sig do
|
|
720
|
-
override.returns(
|
|
721
|
-
T::Array[Revox::AssistantUpdateParams::LlmModel::Variants]
|
|
722
|
-
)
|
|
723
|
-
end
|
|
724
|
-
def self.variants
|
|
725
|
-
end
|
|
726
2315
|
end
|
|
727
2316
|
|
|
728
2317
|
class StructuredOutputConfig < Revox::Internal::Type::BaseModel
|
|
@@ -848,6 +2437,190 @@ module Revox
|
|
|
848
2437
|
end
|
|
849
2438
|
end
|
|
850
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
|
+
|
|
851
2624
|
class Voice < Revox::Internal::Type::BaseModel
|
|
852
2625
|
OrHash =
|
|
853
2626
|
T.type_alias do
|
|
@@ -862,6 +2635,22 @@ module Revox
|
|
|
862
2635
|
sig { returns(Revox::AssistantUpdateParams::Voice::Provider::OrSymbol) }
|
|
863
2636
|
attr_accessor :provider
|
|
864
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
|
+
|
|
865
2654
|
# The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
|
|
866
2655
|
# 0.7–1.2. Default is 1.0.
|
|
867
2656
|
sig { returns(T.nilable(Float)) }
|
|
@@ -870,13 +2659,23 @@ module Revox
|
|
|
870
2659
|
sig { params(speed: Float).void }
|
|
871
2660
|
attr_writer :speed
|
|
872
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
|
+
|
|
873
2670
|
# The voice to use for the call. You can get the list of voices using the /voices
|
|
874
2671
|
# endpoint
|
|
875
2672
|
sig do
|
|
876
2673
|
params(
|
|
877
2674
|
id: String,
|
|
878
2675
|
provider: Revox::AssistantUpdateParams::Voice::Provider::OrSymbol,
|
|
879
|
-
|
|
2676
|
+
model: Revox::AssistantUpdateParams::Voice::Model::OrSymbol,
|
|
2677
|
+
speed: Float,
|
|
2678
|
+
volume: Float
|
|
880
2679
|
).returns(T.attached_class)
|
|
881
2680
|
end
|
|
882
2681
|
def self.new(
|
|
@@ -884,9 +2683,15 @@ module Revox
|
|
|
884
2683
|
id:,
|
|
885
2684
|
# The provider of the voice.
|
|
886
2685
|
provider:,
|
|
2686
|
+
# Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
|
|
2687
|
+
# for other providers.
|
|
2688
|
+
model: nil,
|
|
887
2689
|
# The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
|
|
888
2690
|
# 0.7–1.2. Default is 1.0.
|
|
889
|
-
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
|
|
890
2695
|
)
|
|
891
2696
|
end
|
|
892
2697
|
|
|
@@ -895,7 +2700,9 @@ module Revox
|
|
|
895
2700
|
{
|
|
896
2701
|
id: String,
|
|
897
2702
|
provider: Revox::AssistantUpdateParams::Voice::Provider::OrSymbol,
|
|
898
|
-
|
|
2703
|
+
model: Revox::AssistantUpdateParams::Voice::Model::OrSymbol,
|
|
2704
|
+
speed: Float,
|
|
2705
|
+
volume: Float
|
|
899
2706
|
}
|
|
900
2707
|
)
|
|
901
2708
|
end
|
|
@@ -933,6 +2740,234 @@ module Revox
|
|
|
933
2740
|
def self.values
|
|
934
2741
|
end
|
|
935
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
|
|
936
2971
|
end
|
|
937
2972
|
end
|
|
938
2973
|
end
|