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.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +71 -0
  3. data/README.md +39 -14
  4. data/lib/revox/client.rb +15 -1
  5. data/lib/revox/internal/transport/base_client.rb +5 -0
  6. data/lib/revox/internal/util.rb +22 -7
  7. data/lib/revox/models/assistant_create_params.rb +1038 -13
  8. data/lib/revox/models/assistant_create_response.rb +1071 -11
  9. data/lib/revox/models/assistant_list_response.rb +1070 -11
  10. data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
  11. data/lib/revox/models/assistant_update_params.rb +1038 -13
  12. data/lib/revox/models/assistant_update_response.rb +1097 -12
  13. data/lib/revox/models/call_create_params.rb +1065 -13
  14. data/lib/revox/models/call_create_response.rb +1813 -101
  15. data/lib/revox/models/call_retrieve_response.rb +1815 -101
  16. data/lib/revox/models/campaign_create_params.rb +67 -2
  17. data/lib/revox/models/campaign_create_response.rb +1314 -59
  18. data/lib/revox/models/campaign_get_rows_params.rb +1 -46
  19. data/lib/revox/models/campaign_get_rows_response.rb +1837 -129
  20. data/lib/revox/models/campaign_list_response.rb +1312 -59
  21. data/lib/revox/models/campaign_retrieve_response.rb +1312 -56
  22. data/lib/revox/models/users/me_retrieve_response.rb +13 -1
  23. data/lib/revox/models/users/me_update_response.rb +13 -1
  24. data/lib/revox/models/voice_list_response.rb +55 -1
  25. data/lib/revox/models/voice_preview_params.rb +49 -1
  26. data/lib/revox/models.rb +0 -2
  27. data/lib/revox/resources/assistants.rb +116 -8
  28. data/lib/revox/resources/call.rb +0 -29
  29. data/lib/revox/resources/campaigns.rb +12 -17
  30. data/lib/revox/resources/voices.rb +16 -10
  31. data/lib/revox/version.rb +1 -1
  32. data/lib/revox.rb +0 -2
  33. data/rbi/revox/internal/util.rbi +8 -0
  34. data/rbi/revox/models/assistant_create_params.rbi +2138 -103
  35. data/rbi/revox/models/assistant_create_response.rbi +2454 -199
  36. data/rbi/revox/models/assistant_list_response.rbi +2448 -195
  37. data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
  38. data/rbi/revox/models/assistant_update_params.rbi +2138 -103
  39. data/rbi/revox/models/assistant_update_response.rbi +2504 -198
  40. data/rbi/revox/models/call_create_params.rbi +2382 -225
  41. data/rbi/revox/models/call_create_response.rbi +4104 -384
  42. data/rbi/revox/models/call_retrieve_response.rbi +4104 -382
  43. data/rbi/revox/models/campaign_create_params.rbi +136 -0
  44. data/rbi/revox/models/campaign_create_response.rbi +2911 -231
  45. data/rbi/revox/models/campaign_get_rows_params.rbi +2 -82
  46. data/rbi/revox/models/campaign_get_rows_response.rbi +4135 -410
  47. data/rbi/revox/models/campaign_list_response.rbi +2904 -230
  48. data/rbi/revox/models/campaign_retrieve_response.rbi +2911 -231
  49. data/rbi/revox/models/users/me_retrieve_response.rbi +13 -3
  50. data/rbi/revox/models/users/me_update_response.rbi +13 -3
  51. data/rbi/revox/models/voice_list_response.rbi +105 -3
  52. data/rbi/revox/models/voice_preview_params.rbi +69 -0
  53. data/rbi/revox/models.rbi +0 -2
  54. data/rbi/revox/resources/assistants.rbi +284 -8
  55. data/rbi/revox/resources/call.rbi +0 -21
  56. data/rbi/revox/resources/campaigns.rbi +12 -19
  57. data/rbi/revox/resources/voices.rbi +17 -9
  58. data/sig/revox/internal/util.rbs +4 -0
  59. data/sig/revox/models/assistant_create_params.rbs +844 -11
  60. data/sig/revox/models/assistant_create_response.rbs +860 -3
  61. data/sig/revox/models/assistant_list_response.rbs +860 -3
  62. data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
  63. data/sig/revox/models/assistant_update_params.rbs +844 -11
  64. data/sig/revox/models/assistant_update_response.rbs +886 -6
  65. data/sig/revox/models/call_create_params.rbs +847 -13
  66. data/sig/revox/models/call_create_response.rbs +1514 -34
  67. data/sig/revox/models/call_retrieve_response.rbs +1514 -34
  68. data/sig/revox/models/campaign_create_params.rbs +54 -0
  69. data/sig/revox/models/campaign_create_response.rbs +1034 -6
  70. data/sig/revox/models/campaign_get_rows_params.rbs +2 -64
  71. data/sig/revox/models/campaign_get_rows_response.rbs +1522 -54
  72. data/sig/revox/models/campaign_list_response.rbs +1034 -6
  73. data/sig/revox/models/campaign_retrieve_response.rbs +1034 -6
  74. data/sig/revox/models/users/me_retrieve_response.rbs +8 -3
  75. data/sig/revox/models/users/me_update_response.rbs +8 -3
  76. data/sig/revox/models/voice_list_response.rbs +45 -3
  77. data/sig/revox/models/voice_preview_params.rbs +42 -1
  78. data/sig/revox/models.rbs +0 -2
  79. data/sig/revox/resources/assistants.rbs +56 -2
  80. data/sig/revox/resources/call.rbs +0 -7
  81. data/sig/revox/resources/campaigns.rbs +2 -5
  82. data/sig/revox/resources/voices.rbs +4 -0
  83. metadata +2 -8
  84. data/lib/revox/models/call_list_params.rb +0 -52
  85. data/lib/revox/models/call_list_response.rb +0 -259
  86. data/rbi/revox/models/call_list_params.rbi +0 -94
  87. data/rbi/revox/models/call_list_response.rbi +0 -563
  88. data/sig/revox/models/call_list_params.rbs +0 -63
  89. data/sig/revox/models/call_list_response.rbs +0 -226
@@ -12,17 +12,39 @@ module Revox
12
12
  # @return [String]
13
13
  required :id, String
14
14
 
15
+ # @!attribute after_call_sms_outcomes
16
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
17
+ # after-call SMS is sent. E.g. ["interested", "completed", "none"]. Use "none"
18
+ # when outcome is null.
19
+ #
20
+ # @return [Array<Symbol, Revox::Models::AssistantUpdateParams::AfterCallSMSOutcome>, nil]
21
+ optional :after_call_sms_outcomes,
22
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::AssistantUpdateParams::AfterCallSMSOutcome] },
23
+ nil?: true
24
+
25
+ # @!attribute after_call_sms_prompt
26
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
27
+ # placeholders. When null, no after-call SMS is sent.
28
+ #
29
+ # @return [String, nil]
30
+ optional :after_call_sms_prompt, String, nil?: true
31
+
15
32
  # @!attribute background_sound
16
- # The background sound to play during the call. Useful to give the impression that
17
- # your AI agent is in an office, in the street, or anywhere else you want.
33
+ # Ambient background sound to play during the call. null/omitted disables it.
18
34
  #
19
35
  # @return [Symbol, Revox::Models::AssistantUpdateParams::BackgroundSound, nil]
20
36
  optional :background_sound, enum: -> { Revox::AssistantUpdateParams::BackgroundSound }, nil?: true
21
37
 
38
+ # @!attribute background_sound_volume
39
+ # Volume of the ambient background sound (0 = silent, 1 = max).
40
+ #
41
+ # @return [Float, nil]
42
+ optional :background_sound_volume, Float
43
+
22
44
  # @!attribute calendly
23
45
  #
24
46
  # @return [Revox::Models::AssistantUpdateParams::Calendly, nil]
25
- optional :calendly, -> { Revox::AssistantUpdateParams::Calendly }
47
+ optional :calendly, -> { Revox::AssistantUpdateParams::Calendly }, nil?: true
26
48
 
27
49
  # @!attribute call_retry_config
28
50
  # Configuration for call retry behavior including time windows, delays, and max
@@ -31,6 +53,49 @@ module Revox
31
53
  # @return [Revox::Models::AssistantUpdateParams::CallRetryConfig, nil]
32
54
  optional :call_retry_config, -> { Revox::AssistantUpdateParams::CallRetryConfig }
33
55
 
56
+ # @!attribute cartesia_dictionary_pronunciation_id
57
+ # Optional Cartesia pronunciation dictionary ID to use for this assistant's calls.
58
+ # Set null to unlink it.
59
+ #
60
+ # @return [String, nil]
61
+ optional :cartesia_dictionary_pronunciation_id, String, nil?: true
62
+
63
+ # @!attribute custom_tools
64
+ # Custom API tools the assistant can call during conversations. Each tool defines
65
+ # an HTTP endpoint with variable substitution.
66
+ #
67
+ # @return [Array<Revox::Models::AssistantUpdateParams::CustomTool>, nil]
68
+ optional :custom_tools,
69
+ -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::CustomTool] },
70
+ nil?: true
71
+
72
+ # @!attribute email_notification_address
73
+ # Email address(es) to receive notifications when a call ends with a matching
74
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
75
+ # bob@y.com").
76
+ #
77
+ # @return [String, nil]
78
+ optional :email_notification_address, String, nil?: true
79
+
80
+ # @!attribute email_notification_language
81
+ # The language used for the notification email content. One of "en" or "fr".
82
+ # Defaults to "en".
83
+ #
84
+ # @return [Symbol, Revox::Models::AssistantUpdateParams::EmailNotificationLanguage, nil]
85
+ optional :email_notification_language,
86
+ enum: -> { Revox::AssistantUpdateParams::EmailNotificationLanguage }
87
+
88
+ # @!attribute email_notification_outcomes
89
+ # Which call outcomes trigger an email notification. E.g. ["interested",
90
+ # "completed", "none"]. Use "none" when outcome is null.
91
+ #
92
+ # @return [Array<Symbol, Revox::Models::AssistantUpdateParams::EmailNotificationOutcome>, nil]
93
+ optional :email_notification_outcomes,
94
+ -> {
95
+ Revox::Internal::Type::ArrayOf[enum: Revox::AssistantUpdateParams::EmailNotificationOutcome]
96
+ },
97
+ nil?: true
98
+
34
99
  # @!attribute end_of_call_sentence
35
100
  # Optional message to say when the agent decides to end the call.
36
101
  #
@@ -65,6 +130,21 @@ module Revox
65
130
  # @return [Symbol, Revox::Models::AssistantUpdateParams::FirstSentenceMode, nil]
66
131
  optional :first_sentence_mode, enum: -> { Revox::AssistantUpdateParams::FirstSentenceMode }
67
132
 
133
+ # @!attribute from_phone_number
134
+ # Override the default outbound phone number for calls placed with this assistant.
135
+ # Must be a phone number owned by the organization in E.164 format (e.g.
136
+ # +1234567890). When null, the organization's default phone number is used.
137
+ #
138
+ # @return [String, nil]
139
+ optional :from_phone_number, String, nil?: true
140
+
141
+ # @!attribute human_transfer_mode
142
+ # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
143
+ # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
144
+ #
145
+ # @return [Symbol, Revox::Models::AssistantUpdateParams::HumanTransferMode, nil]
146
+ optional :human_transfer_mode, enum: -> { Revox::AssistantUpdateParams::HumanTransferMode }, nil?: true
147
+
68
148
  # @!attribute ivr_navigation_enabled
69
149
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
70
150
  # skip turns to navigate phone menus.
@@ -74,9 +154,16 @@ module Revox
74
154
 
75
155
  # @!attribute llm_model
76
156
  #
77
- # @return [Revox::Models::AssistantUpdateParams::LlmModel::UnionMember0, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember1, nil]
157
+ # @return [Revox::Models::AssistantUpdateParams::LlmModel::UnionMember0, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember1, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember2, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember3, nil]
78
158
  optional :llm_model, union: -> { Revox::AssistantUpdateParams::LlmModel }
79
159
 
160
+ # @!attribute logo_url
161
+ # Public URL of the brand logo shown on the assistant's demo page. Upload a new
162
+ # logo via POST /assistants/:id/logo. Set explicitly to null to clear it.
163
+ #
164
+ # @return [String, nil]
165
+ optional :logo_url, String, nil?: true
166
+
80
167
  # @!attribute max_call_duration_secs
81
168
  # The maximum duration of the call in seconds. This is the maximum time the call
82
169
  # will be allowed to run.
@@ -84,17 +171,61 @@ module Revox
84
171
  # @return [Float, nil]
85
172
  optional :max_call_duration_secs, Float
86
173
 
174
+ # @!attribute max_duration_end_message
175
+ # Optional message the agent will say, without being interruptible, when the call
176
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
177
+ # not set, the call ends silently.
178
+ #
179
+ # @return [String, nil]
180
+ optional :max_duration_end_message, String, nil?: true
181
+
87
182
  # @!attribute name
88
183
  #
89
184
  # @return [String, nil]
90
185
  optional :name, String
91
186
 
187
+ # @!attribute position
188
+ # Canvas position of this assistant's node in its multi-step flow editor.
189
+ #
190
+ # @return [Revox::Models::AssistantUpdateParams::Position, nil]
191
+ optional :position, -> { Revox::AssistantUpdateParams::Position }, nil?: true
192
+
92
193
  # @!attribute prompt
93
194
  # The prompt to use for the call. This will be given to the LLM (gpt-4.1)
94
195
  #
95
196
  # @return [String, nil]
96
197
  optional :prompt, String
97
198
 
199
+ # @!attribute prompt_flow
200
+ # Visual prompt constructor data (nodes, edges, positions). Used by the UI to
201
+ # re-open the visual editor. Does not affect call behavior — the flattened prompt
202
+ # field is what the LLM receives.
203
+ #
204
+ # @return [Revox::Models::AssistantUpdateParams::PromptFlow, nil]
205
+ optional :prompt_flow, -> { Revox::AssistantUpdateParams::PromptFlow }, nil?: true
206
+
207
+ # @!attribute slack
208
+ # Slack notification config. When set, posts a message to the chosen channel after
209
+ # a call ends with one of the configured outcomes.
210
+ #
211
+ # @return [Revox::Models::AssistantUpdateParams::Slack, nil]
212
+ optional :slack, -> { Revox::AssistantUpdateParams::Slack }, nil?: true
213
+
214
+ # @!attribute sms_enabled
215
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
216
+ # the user on the call.
217
+ #
218
+ # @return [Boolean, nil]
219
+ optional :sms_enabled, Revox::Internal::Type::Boolean
220
+
221
+ # @!attribute sms_template
222
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
223
+ # instead of letting the agent generate the message. Supports {{variable}}
224
+ # placeholders.
225
+ #
226
+ # @return [String, nil]
227
+ optional :sms_template, String, nil?: true
228
+
98
229
  # @!attribute structured_output_config
99
230
  # The structured output config to use for the call. This is used to extract the
100
231
  # data from the call (like email, name, company name, etc.).
@@ -103,6 +234,49 @@ module Revox
103
234
  optional :structured_output_config,
104
235
  -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::StructuredOutputConfig] }
105
236
 
237
+ # @!attribute structured_output_prompt
238
+ # Custom prompt for structured data extraction. If not provided, a default prompt
239
+ # is used. Available variables: {{transcript}}, {{call_direction}},
240
+ # {{user_phone_number}}, {{agent_phone_number}}.
241
+ #
242
+ # @return [String, nil]
243
+ optional :structured_output_prompt, String, nil?: true
244
+
245
+ # @!attribute stt_context
246
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
247
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
248
+ # replacing existing entries.
249
+ #
250
+ # @return [Revox::Models::AssistantUpdateParams::SttContext, nil]
251
+ optional :stt_context, -> { Revox::AssistantUpdateParams::SttContext }, nil?: true
252
+
253
+ # @!attribute stt_model
254
+ # Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
255
+ # when omitted.
256
+ #
257
+ # @return [Symbol, Revox::Models::AssistantUpdateParams::SttModel, nil]
258
+ optional :stt_model, enum: -> { Revox::AssistantUpdateParams::SttModel }
259
+
260
+ # @!attribute thinking_sound
261
+ # Audio clip to play while the agent is processing a response. One of the built-in
262
+ # LiveKit audio clips; null/omitted disables it.
263
+ #
264
+ # @return [Symbol, Revox::Models::AssistantUpdateParams::ThinkingSound, nil]
265
+ optional :thinking_sound, enum: -> { Revox::AssistantUpdateParams::ThinkingSound }, nil?: true
266
+
267
+ # @!attribute thinking_sound_probability
268
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
269
+ # the agent is silent while thinking.
270
+ #
271
+ # @return [Float, nil]
272
+ optional :thinking_sound_probability, Float
273
+
274
+ # @!attribute thinking_sound_volume
275
+ # Volume of the thinking sound (0 = silent, 1 = max).
276
+ #
277
+ # @return [Float, nil]
278
+ optional :thinking_sound_volume, Float
279
+
106
280
  # @!attribute transfer_phone_number
107
281
  # Phone number to transfer calls to when users request to speak to a human agent
108
282
  # in E.164 format (e.g. +1234567890).
@@ -110,6 +284,15 @@ module Revox
110
284
  # @return [String, nil]
111
285
  optional :transfer_phone_number, String, nil?: true
112
286
 
287
+ # @!attribute type
288
+ # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
289
+ # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
290
+ # multi-step flow (hidden from the assistants list). Flow transitions are managed
291
+ # via the /assistants/:id/edges endpoints, not on the assistant itself.
292
+ #
293
+ # @return [Symbol, Revox::Models::AssistantUpdateParams::Type, nil]
294
+ optional :type, enum: -> { Revox::AssistantUpdateParams::Type }
295
+
113
296
  # @!attribute voice
114
297
  # The voice to use for the call. You can get the list of voices using the /voices
115
298
  # endpoint
@@ -124,24 +307,63 @@ module Revox
124
307
  # @return [String, nil]
125
308
  optional :voicemail_message, String, nil?: true
126
309
 
310
+ # @!attribute voicemail_sms_prompt
311
+ # SMS message to send when the call reaches voicemail. Supports {{variable}}
312
+ # placeholders. When null, no SMS is sent on voicemail.
313
+ #
314
+ # @return [String, nil]
315
+ optional :voicemail_sms_prompt, String, nil?: true
316
+
317
+ # @!attribute warm_transfer_summary_instructions
318
+ # When using warm transfer: extra instructions for the supervisor handoff summary.
319
+ # If null or empty, the API uses the product default briefing when the call is
320
+ # loaded for the agent.
321
+ #
322
+ # @return [String, nil]
323
+ optional :warm_transfer_summary_instructions, String, nil?: true
324
+
127
325
  # @!attribute webhook_url
128
326
  # The webhook URL to call when the call is completed.
129
327
  #
130
328
  # @return [String, nil]
131
329
  optional :webhook_url, String
132
330
 
133
- # @!method initialize(id:, background_sound: nil, calendly: nil, call_retry_config: nil, end_of_call_sentence: nil, faq_items: nil, first_sentence: nil, first_sentence_delay_ms: nil, first_sentence_mode: nil, ivr_navigation_enabled: nil, llm_model: nil, max_call_duration_secs: nil, name: nil, prompt: nil, structured_output_config: nil, transfer_phone_number: nil, voice: nil, voicemail_message: nil, webhook_url: nil, request_options: {})
331
+ # @!attribute zoho
332
+ # Zoho CRM integration config. When set, upserts the prospect (keyed on phone)
333
+ # into the chosen module and attaches a Note with the call summary after a call
334
+ # ends with one of the configured outcomes.
335
+ #
336
+ # @return [Revox::Models::AssistantUpdateParams::Zoho, nil]
337
+ optional :zoho, -> { Revox::AssistantUpdateParams::Zoho }, nil?: true
338
+
339
+ # @!method initialize(id:, after_call_sms_outcomes: nil, after_call_sms_prompt: nil, background_sound: nil, background_sound_volume: nil, calendly: nil, call_retry_config: nil, cartesia_dictionary_pronunciation_id: nil, custom_tools: nil, email_notification_address: nil, email_notification_language: nil, email_notification_outcomes: nil, end_of_call_sentence: nil, faq_items: nil, first_sentence: nil, first_sentence_delay_ms: nil, first_sentence_mode: nil, from_phone_number: nil, human_transfer_mode: nil, ivr_navigation_enabled: nil, llm_model: nil, logo_url: nil, max_call_duration_secs: nil, max_duration_end_message: nil, name: nil, position: nil, prompt: nil, prompt_flow: nil, slack: nil, sms_enabled: nil, sms_template: nil, structured_output_config: nil, structured_output_prompt: nil, stt_context: nil, stt_model: nil, thinking_sound: nil, thinking_sound_probability: nil, thinking_sound_volume: nil, transfer_phone_number: nil, type: nil, voice: nil, voicemail_message: nil, voicemail_sms_prompt: nil, warm_transfer_summary_instructions: nil, webhook_url: nil, zoho: nil, request_options: {})
134
340
  # Some parameter documentations has been truncated, see
135
341
  # {Revox::Models::AssistantUpdateParams} for more details.
136
342
  #
137
343
  # @param id [String]
138
344
  #
139
- # @param background_sound [Symbol, Revox::Models::AssistantUpdateParams::BackgroundSound, nil] The background sound to play during the call. Useful to give the impression that
345
+ # @param after_call_sms_outcomes [Array<Symbol, Revox::Models::AssistantUpdateParams::AfterCallSMSOutcome>, nil] Which call outcomes trigger the after-call SMS. When empty or null, no after-cal
346
+ #
347
+ # @param after_call_sms_prompt [String, nil] Prompt / instructions for the after-call SMS. Supports {{variable}} placeholders
140
348
  #
141
- # @param calendly [Revox::Models::AssistantUpdateParams::Calendly]
349
+ # @param background_sound [Symbol, Revox::Models::AssistantUpdateParams::BackgroundSound, nil] Ambient background sound to play during the call. null/omitted disables it.
350
+ #
351
+ # @param background_sound_volume [Float] Volume of the ambient background sound (0 = silent, 1 = max).
352
+ #
353
+ # @param calendly [Revox::Models::AssistantUpdateParams::Calendly, nil]
142
354
  #
143
355
  # @param call_retry_config [Revox::Models::AssistantUpdateParams::CallRetryConfig] Configuration for call retry behavior including time windows, delays, and max it
144
356
  #
357
+ # @param cartesia_dictionary_pronunciation_id [String, nil] Optional Cartesia pronunciation dictionary ID to use for this assistant's calls.
358
+ #
359
+ # @param custom_tools [Array<Revox::Models::AssistantUpdateParams::CustomTool>, nil] Custom API tools the assistant can call during conversations. Each tool defines
360
+ #
361
+ # @param email_notification_address [String, nil] Email address(es) to receive notifications when a call ends with a matching outc
362
+ #
363
+ # @param email_notification_language [Symbol, Revox::Models::AssistantUpdateParams::EmailNotificationLanguage] The language used for the notification email content. One of "en" or "fr". Defau
364
+ #
365
+ # @param email_notification_outcomes [Array<Symbol, Revox::Models::AssistantUpdateParams::EmailNotificationOutcome>, nil] Which call outcomes trigger an email notification. E.g. ["interested", "complete
366
+ #
145
367
  # @param end_of_call_sentence [String] Optional message to say when the agent decides to end the call.
146
368
  #
147
369
  # @param faq_items [Array<Revox::Models::AssistantUpdateParams::FaqItem>] FAQ items to associate with this assistant. When provided, replaces all existing
@@ -152,30 +374,83 @@ module Revox
152
374
  #
153
375
  # @param first_sentence_mode [Symbol, Revox::Models::AssistantUpdateParams::FirstSentenceMode] How the first sentence should be handled. "generated" means the LLM will generat
154
376
  #
377
+ # @param from_phone_number [String, nil] Override the default outbound phone number for calls placed with this assistant.
378
+ #
379
+ # @param human_transfer_mode [Symbol, Revox::Models::AssistantUpdateParams::HumanTransferMode, nil] When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER; tru
380
+ #
155
381
  # @param ivr_navigation_enabled [Boolean] Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
156
382
  #
157
- # @param llm_model [Revox::Models::AssistantUpdateParams::LlmModel::UnionMember0, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember1]
383
+ # @param llm_model [Revox::Models::AssistantUpdateParams::LlmModel::UnionMember0, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember1, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember2, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember3]
384
+ #
385
+ # @param logo_url [String, nil] Public URL of the brand logo shown on the assistant's demo page. Upload a new lo
158
386
  #
159
387
  # @param max_call_duration_secs [Float] The maximum duration of the call in seconds. This is the maximum time the call w
160
388
  #
389
+ # @param max_duration_end_message [String, nil] Optional message the agent will say, without being interruptible, when the call
390
+ #
161
391
  # @param name [String]
162
392
  #
393
+ # @param position [Revox::Models::AssistantUpdateParams::Position, nil] Canvas position of this assistant's node in its multi-step flow editor.
394
+ #
163
395
  # @param prompt [String] The prompt to use for the call. This will be given to the LLM (gpt-4.1)
164
396
  #
397
+ # @param prompt_flow [Revox::Models::AssistantUpdateParams::PromptFlow, nil] Visual prompt constructor data (nodes, edges, positions). Used by the UI to re-o
398
+ #
399
+ # @param slack [Revox::Models::AssistantUpdateParams::Slack, nil] Slack notification config. When set, posts a message to the chosen channel after
400
+ #
401
+ # @param sms_enabled [Boolean] Enable SMS tool during calls. When enabled, the agent can send SMS messages to t
402
+ #
403
+ # @param sms_template [String, nil] Hardcoded SMS template to send during calls. When set, this exact text is sent i
404
+ #
165
405
  # @param structured_output_config [Array<Revox::Models::AssistantUpdateParams::StructuredOutputConfig>] The structured output config to use for the call. This is used to extract the da
166
406
  #
407
+ # @param structured_output_prompt [String, nil] Custom prompt for structured data extraction. If not provided, a default prompt
408
+ #
409
+ # @param stt_context [Revox::Models::AssistantUpdateParams::SttContext, nil] Assistant-level speech-to-text context: structured `general` key/value pairs plu
410
+ #
411
+ # @param stt_model [Symbol, Revox::Models::AssistantUpdateParams::SttModel] Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
412
+ #
413
+ # @param thinking_sound [Symbol, Revox::Models::AssistantUpdateParams::ThinkingSound, nil] Audio clip to play while the agent is processing a response. One of the built-in
414
+ #
415
+ # @param thinking_sound_probability [Float] Probability [0..1] that the thinking sound plays on any given turn; otherwise th
416
+ #
417
+ # @param thinking_sound_volume [Float] Volume of the thinking sound (0 = silent, 1 = max).
418
+ #
167
419
  # @param transfer_phone_number [String, nil] Phone number to transfer calls to when users request to speak to a human agent i
168
420
  #
421
+ # @param type [Symbol, Revox::Models::AssistantUpdateParams::Type] Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step' orche
422
+ #
169
423
  # @param voice [Revox::Models::AssistantUpdateParams::Voice] The voice to use for the call. You can get the list of voices using the /voices
170
424
  #
171
425
  # @param voicemail_message [String, nil] If set, when voicemail is detected the agent will speak this message then hang u
172
426
  #
427
+ # @param voicemail_sms_prompt [String, nil] SMS message to send when the call reaches voicemail. Supports {{variable}} place
428
+ #
429
+ # @param warm_transfer_summary_instructions [String, nil] When using warm transfer: extra instructions for the supervisor handoff summary.
430
+ #
173
431
  # @param webhook_url [String] The webhook URL to call when the call is completed.
174
432
  #
433
+ # @param zoho [Revox::Models::AssistantUpdateParams::Zoho, nil] Zoho CRM integration config. When set, upserts the prospect (keyed on phone) int
434
+ #
175
435
  # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}]
176
436
 
177
- # The background sound to play during the call. Useful to give the impression that
178
- # your AI agent is in an office, in the street, or anywhere else you want.
437
+ module AfterCallSMSOutcome
438
+ extend Revox::Internal::Type::Enum
439
+
440
+ NOT_INTERESTED = :not_interested
441
+ INTERESTED = :interested
442
+ COMPLETED = :completed
443
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
444
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
445
+ DO_NOT_CONTACT = :do_not_contact
446
+ AI_AVERSE = :ai_averse
447
+ NONE = :none
448
+
449
+ # @!method self.values
450
+ # @return [Array<Symbol>]
451
+ end
452
+
453
+ # Ambient background sound to play during the call. null/omitted disables it.
179
454
  module BackgroundSound
180
455
  extend Revox::Internal::Type::Enum
181
456
 
@@ -209,6 +484,23 @@ module Revox
209
484
  end
210
485
 
211
486
  class CallRetryConfig < Revox::Internal::Type::BaseModel
487
+ # @!attribute allowed_days
488
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
489
+ # Monday through Friday.
490
+ #
491
+ # @return [Array<Symbol, Revox::Models::AssistantUpdateParams::CallRetryConfig::AllowedDay>]
492
+ required :allowed_days,
493
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::AssistantUpdateParams::CallRetryConfig::AllowedDay] }
494
+
495
+ # @!attribute call_twice_in_a_row
496
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
497
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
498
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
499
+ # Default: false.
500
+ #
501
+ # @return [Boolean]
502
+ required :call_twice_in_a_row, Revox::Internal::Type::Boolean
503
+
212
504
  # @!attribute calling_windows
213
505
  #
214
506
  # @return [Array<Revox::Models::AssistantUpdateParams::CallRetryConfig::CallingWindow>]
@@ -229,19 +521,38 @@ module Revox
229
521
  # @return [String, nil]
230
522
  optional :timezone, String, nil?: true
231
523
 
232
- # @!method initialize(calling_windows:, max_retry_attempts:, timezone: nil)
524
+ # @!method initialize(allowed_days:, call_twice_in_a_row:, calling_windows:, max_retry_attempts:, timezone: nil)
233
525
  # Some parameter documentations has been truncated, see
234
526
  # {Revox::Models::AssistantUpdateParams::CallRetryConfig} for more details.
235
527
  #
236
528
  # Configuration for call retry behavior including time windows, delays, and max
237
529
  # iterations. If not provided, defaults will be used.
238
530
  #
531
+ # @param allowed_days [Array<Symbol, Revox::Models::AssistantUpdateParams::CallRetryConfig::AllowedDay>] Days of the week when calls are allowed, in the recipient's timezone. Default: M
532
+ #
533
+ # @param call_twice_in_a_row [Boolean] If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping retr
534
+ #
239
535
  # @param calling_windows [Array<Revox::Models::AssistantUpdateParams::CallRetryConfig::CallingWindow>]
240
536
  #
241
537
  # @param max_retry_attempts [Integer] Maximum number of call retry attempts. Default: 3.
242
538
  #
243
539
  # @param timezone [String, nil] Optional IANA timezone identifier to override the automatic timezone detection f
244
540
 
541
+ module AllowedDay
542
+ extend Revox::Internal::Type::Enum
543
+
544
+ MONDAY = :monday
545
+ TUESDAY = :tuesday
546
+ WEDNESDAY = :wednesday
547
+ THURSDAY = :thursday
548
+ FRIDAY = :friday
549
+ SATURDAY = :saturday
550
+ SUNDAY = :sunday
551
+
552
+ # @!method self.values
553
+ # @return [Array<Symbol>]
554
+ end
555
+
245
556
  class CallingWindow < Revox::Internal::Type::BaseModel
246
557
  # @!attribute calling_window_end_time
247
558
  # End time for the calling window in the recipient's timezone (or
@@ -278,6 +589,208 @@ module Revox
278
589
  end
279
590
  end
280
591
 
592
+ class CustomTool < Revox::Internal::Type::BaseModel
593
+ # @!attribute body_template
594
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
595
+ # "{{name}}") for dynamic values
596
+ #
597
+ # @return [String, nil]
598
+ required :body_template, String, nil?: true
599
+
600
+ # @!attribute description
601
+ # Human-readable description of what the tool does, used by the LLM to decide when
602
+ # to call it
603
+ #
604
+ # @return [String]
605
+ required :description, String
606
+
607
+ # @!attribute headers
608
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
609
+ #
610
+ # @return [Array<Revox::Models::AssistantUpdateParams::CustomTool::Header>]
611
+ required :headers, -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::CustomTool::Header] }
612
+
613
+ # @!attribute input_schema
614
+ # Schema defining the parameters the LLM should extract from the conversation to
615
+ # pass to this tool
616
+ #
617
+ # @return [Array<Revox::Models::AssistantUpdateParams::CustomTool::InputSchema>]
618
+ required :input_schema,
619
+ -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::CustomTool::InputSchema] }
620
+
621
+ # @!attribute method_
622
+ # HTTP method to use when calling the API endpoint
623
+ #
624
+ # @return [Symbol, Revox::Models::AssistantUpdateParams::CustomTool::Method]
625
+ required :method_, enum: -> { Revox::AssistantUpdateParams::CustomTool::Method }, api_name: :method
626
+
627
+ # @!attribute name
628
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
629
+ #
630
+ # @return [String]
631
+ required :name, String
632
+
633
+ # @!attribute query_params
634
+ # Query string parameters appended to the URL. Values support {{variable}}
635
+ # placeholders
636
+ #
637
+ # @return [Array<Revox::Models::AssistantUpdateParams::CustomTool::QueryParam>]
638
+ required :query_params,
639
+ -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::CustomTool::QueryParam] }
640
+
641
+ # @!attribute url
642
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
643
+ # values
644
+ #
645
+ # @return [String]
646
+ required :url, String
647
+
648
+ # @!method initialize(body_template:, description:, headers:, input_schema:, method_:, name:, query_params:, url:)
649
+ # Some parameter documentations has been truncated, see
650
+ # {Revox::Models::AssistantUpdateParams::CustomTool} for more details.
651
+ #
652
+ # @param body_template [String, nil] JSON body template for the request. Use quoted {{variable}} placeholders (e.g. "
653
+ #
654
+ # @param description [String] Human-readable description of what the tool does, used by the LLM to decide when
655
+ #
656
+ # @param headers [Array<Revox::Models::AssistantUpdateParams::CustomTool::Header>] HTTP headers to include in the request. Values support {{variable}} placeholders
657
+ #
658
+ # @param input_schema [Array<Revox::Models::AssistantUpdateParams::CustomTool::InputSchema>] Schema defining the parameters the LLM should extract from the conversation to p
659
+ #
660
+ # @param method_ [Symbol, Revox::Models::AssistantUpdateParams::CustomTool::Method] HTTP method to use when calling the API endpoint
661
+ #
662
+ # @param name [String] Unique tool name in lowercase_snake_case (e.g. check_inventory)
663
+ #
664
+ # @param query_params [Array<Revox::Models::AssistantUpdateParams::CustomTool::QueryParam>] Query string parameters appended to the URL. Values support {{variable}} placeho
665
+ #
666
+ # @param url [String] Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic val
667
+
668
+ class Header < Revox::Internal::Type::BaseModel
669
+ # @!attribute key
670
+ #
671
+ # @return [String]
672
+ required :key, String
673
+
674
+ # @!attribute value
675
+ #
676
+ # @return [String]
677
+ required :value, String
678
+
679
+ # @!method initialize(key:, value:)
680
+ # @param key [String]
681
+ # @param value [String]
682
+ end
683
+
684
+ class InputSchema < Revox::Internal::Type::BaseModel
685
+ # @!attribute name
686
+ #
687
+ # @return [String]
688
+ required :name, String
689
+
690
+ # @!attribute required
691
+ #
692
+ # @return [Boolean]
693
+ required :required, Revox::Internal::Type::Boolean
694
+
695
+ # @!attribute type
696
+ #
697
+ # @return [Symbol, Revox::Models::AssistantUpdateParams::CustomTool::InputSchema::Type]
698
+ required :type, enum: -> { Revox::AssistantUpdateParams::CustomTool::InputSchema::Type }
699
+
700
+ # @!attribute description
701
+ #
702
+ # @return [String, nil]
703
+ optional :description, String
704
+
705
+ # @!attribute enum_options
706
+ #
707
+ # @return [Array<String>, nil]
708
+ optional :enum_options, Revox::Internal::Type::ArrayOf[String]
709
+
710
+ # @!method initialize(name:, required:, type:, description: nil, enum_options: nil)
711
+ # @param name [String]
712
+ # @param required [Boolean]
713
+ # @param type [Symbol, Revox::Models::AssistantUpdateParams::CustomTool::InputSchema::Type]
714
+ # @param description [String]
715
+ # @param enum_options [Array<String>]
716
+
717
+ # @see Revox::Models::AssistantUpdateParams::CustomTool::InputSchema#type
718
+ module Type
719
+ extend Revox::Internal::Type::Enum
720
+
721
+ STRING = :string
722
+ NUMBER = :number
723
+ BOOLEAN = :boolean
724
+ ENUM = :enum
725
+ DATE = :date
726
+ DATETIME = :datetime
727
+
728
+ # @!method self.values
729
+ # @return [Array<Symbol>]
730
+ end
731
+ end
732
+
733
+ # HTTP method to use when calling the API endpoint
734
+ #
735
+ # @see Revox::Models::AssistantUpdateParams::CustomTool#method_
736
+ module Method
737
+ extend Revox::Internal::Type::Enum
738
+
739
+ GET = :GET
740
+ POST = :POST
741
+ PUT = :PUT
742
+ PATCH = :PATCH
743
+ DELETE = :DELETE
744
+
745
+ # @!method self.values
746
+ # @return [Array<Symbol>]
747
+ end
748
+
749
+ class QueryParam < Revox::Internal::Type::BaseModel
750
+ # @!attribute key
751
+ #
752
+ # @return [String]
753
+ required :key, String
754
+
755
+ # @!attribute value
756
+ #
757
+ # @return [String]
758
+ required :value, String
759
+
760
+ # @!method initialize(key:, value:)
761
+ # @param key [String]
762
+ # @param value [String]
763
+ end
764
+ end
765
+
766
+ # The language used for the notification email content. One of "en" or "fr".
767
+ # Defaults to "en".
768
+ module EmailNotificationLanguage
769
+ extend Revox::Internal::Type::Enum
770
+
771
+ EN = :en
772
+ FR = :fr
773
+
774
+ # @!method self.values
775
+ # @return [Array<Symbol>]
776
+ end
777
+
778
+ module EmailNotificationOutcome
779
+ extend Revox::Internal::Type::Enum
780
+
781
+ NOT_INTERESTED = :not_interested
782
+ INTERESTED = :interested
783
+ COMPLETED = :completed
784
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
785
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
786
+ DO_NOT_CONTACT = :do_not_contact
787
+ AI_AVERSE = :ai_averse
788
+ NONE = :none
789
+
790
+ # @!method self.values
791
+ # @return [Array<Symbol>]
792
+ end
793
+
281
794
  class FaqItem < Revox::Internal::Type::BaseModel
282
795
  # @!attribute answer
283
796
  #
@@ -309,6 +822,18 @@ module Revox
309
822
  # @return [Array<Symbol>]
310
823
  end
311
824
 
825
+ # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
826
+ # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
827
+ module HumanTransferMode
828
+ extend Revox::Internal::Type::Enum
829
+
830
+ WARM = :warm
831
+ COLD = :cold
832
+
833
+ # @!method self.values
834
+ # @return [Array<Symbol>]
835
+ end
836
+
312
837
  module LlmModel
313
838
  extend Revox::Internal::Type::Union
314
839
 
@@ -316,6 +841,10 @@ module Revox
316
841
 
317
842
  variant -> { Revox::AssistantUpdateParams::LlmModel::UnionMember1 }
318
843
 
844
+ variant -> { Revox::AssistantUpdateParams::LlmModel::UnionMember2 }
845
+
846
+ variant -> { Revox::AssistantUpdateParams::LlmModel::UnionMember3 }
847
+
319
848
  class UnionMember0 < Revox::Internal::Type::BaseModel
320
849
  # @!attribute name
321
850
  #
@@ -370,8 +899,285 @@ module Revox
370
899
  # @param type [Symbol, :openrouter] Use a model from OpenRouter.
371
900
  end
372
901
 
902
+ class UnionMember2 < Revox::Internal::Type::BaseModel
903
+ # @!attribute api_key
904
+ # API key sent as Bearer token to the custom endpoint.
905
+ #
906
+ # @return [String]
907
+ required :api_key, String
908
+
909
+ # @!attribute api_url
910
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
911
+ #
912
+ # @return [String]
913
+ required :api_url, String
914
+
915
+ # @!attribute model_name
916
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
917
+ #
918
+ # @return [String]
919
+ required :model_name, String
920
+
921
+ # @!attribute type
922
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
923
+ #
924
+ # @return [Symbol, :custom]
925
+ required :type, const: :custom
926
+
927
+ # @!method initialize(api_key:, api_url:, model_name:, type: :custom)
928
+ # @param api_key [String] API key sent as Bearer token to the custom endpoint.
929
+ #
930
+ # @param api_url [String] Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
931
+ #
932
+ # @param model_name [String] Model name as expected by the provider, e.g. meta-llama/llama-3-70b
933
+ #
934
+ # @param type [Symbol, :custom] OpenAI-compatible chat completions API (bring your own endpoint and key).
935
+ end
936
+
937
+ class UnionMember3 < Revox::Internal::Type::BaseModel
938
+ # @!attribute provider
939
+ # The provider to use from Realtime. eg: openai, google.
940
+ #
941
+ # @return [Symbol, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember3::Provider]
942
+ required :provider, enum: -> { Revox::AssistantUpdateParams::LlmModel::UnionMember3::Provider }
943
+
944
+ # @!attribute realtime_model_id
945
+ # The model ID to use from Realtime. eg: gpt-4.1
946
+ #
947
+ # @return [String]
948
+ required :realtime_model_id, String
949
+
950
+ # @!attribute type
951
+ # Use a model from Realtime.
952
+ #
953
+ # @return [Symbol, :realtime]
954
+ required :type, const: :realtime
955
+
956
+ # @!attribute realtime_voice_id
957
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
958
+ #
959
+ # @return [String, nil]
960
+ optional :realtime_voice_id, String
961
+
962
+ # @!method initialize(provider:, realtime_model_id:, realtime_voice_id: nil, type: :realtime)
963
+ # @param provider [Symbol, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember3::Provider] The provider to use from Realtime. eg: openai, google.
964
+ #
965
+ # @param realtime_model_id [String] The model ID to use from Realtime. eg: gpt-4.1
966
+ #
967
+ # @param realtime_voice_id [String] Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
968
+ #
969
+ # @param type [Symbol, :realtime] Use a model from Realtime.
970
+
971
+ # The provider to use from Realtime. eg: openai, google.
972
+ #
973
+ # @see Revox::Models::AssistantUpdateParams::LlmModel::UnionMember3#provider
974
+ module Provider
975
+ extend Revox::Internal::Type::Enum
976
+
977
+ OPENAI = :openai
978
+ GOOGLE = :google
979
+
980
+ # @!method self.values
981
+ # @return [Array<Symbol>]
982
+ end
983
+ end
984
+
373
985
  # @!method self.variants
374
- # @return [Array(Revox::Models::AssistantUpdateParams::LlmModel::UnionMember0, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember1)]
986
+ # @return [Array(Revox::Models::AssistantUpdateParams::LlmModel::UnionMember0, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember1, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember2, Revox::Models::AssistantUpdateParams::LlmModel::UnionMember3)]
987
+ end
988
+
989
+ class Position < Revox::Internal::Type::BaseModel
990
+ # @!attribute x
991
+ #
992
+ # @return [Float]
993
+ required :x, Float
994
+
995
+ # @!attribute y_
996
+ #
997
+ # @return [Float]
998
+ required :y_, Float, api_name: :y
999
+
1000
+ # @!method initialize(x:, y_:)
1001
+ # Canvas position of this assistant's node in its multi-step flow editor.
1002
+ #
1003
+ # @param x [Float]
1004
+ # @param y_ [Float]
1005
+ end
1006
+
1007
+ class PromptFlow < Revox::Internal::Type::BaseModel
1008
+ # @!attribute edges
1009
+ #
1010
+ # @return [Array<Revox::Models::AssistantUpdateParams::PromptFlow::Edge>]
1011
+ required :edges, -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::PromptFlow::Edge] }
1012
+
1013
+ # @!attribute nodes
1014
+ #
1015
+ # @return [Array<Revox::Models::AssistantUpdateParams::PromptFlow::Node>]
1016
+ required :nodes, -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::PromptFlow::Node] }
1017
+
1018
+ # @!method initialize(edges:, nodes:)
1019
+ # Visual prompt constructor data (nodes, edges, positions). Used by the UI to
1020
+ # re-open the visual editor. Does not affect call behavior — the flattened prompt
1021
+ # field is what the LLM receives.
1022
+ #
1023
+ # @param edges [Array<Revox::Models::AssistantUpdateParams::PromptFlow::Edge>]
1024
+ # @param nodes [Array<Revox::Models::AssistantUpdateParams::PromptFlow::Node>]
1025
+
1026
+ class Edge < Revox::Internal::Type::BaseModel
1027
+ # @!attribute id
1028
+ #
1029
+ # @return [String]
1030
+ required :id, String
1031
+
1032
+ # @!attribute source
1033
+ #
1034
+ # @return [String]
1035
+ required :source, String
1036
+
1037
+ # @!attribute target
1038
+ #
1039
+ # @return [String]
1040
+ required :target, String
1041
+
1042
+ # @!method initialize(id:, source:, target:)
1043
+ # @param id [String]
1044
+ # @param source [String]
1045
+ # @param target [String]
1046
+ end
1047
+
1048
+ class Node < Revox::Internal::Type::BaseModel
1049
+ # @!attribute id
1050
+ #
1051
+ # @return [String]
1052
+ required :id, String
1053
+
1054
+ # @!attribute data
1055
+ #
1056
+ # @return [Revox::Models::AssistantUpdateParams::PromptFlow::Node::Data]
1057
+ required :data, -> { Revox::AssistantUpdateParams::PromptFlow::Node::Data }
1058
+
1059
+ # @!attribute position
1060
+ #
1061
+ # @return [Revox::Models::AssistantUpdateParams::PromptFlow::Node::Position]
1062
+ required :position, -> { Revox::AssistantUpdateParams::PromptFlow::Node::Position }
1063
+
1064
+ # @!attribute type
1065
+ #
1066
+ # @return [Symbol, :promptBlock]
1067
+ required :type, const: :promptBlock
1068
+
1069
+ # @!method initialize(id:, data:, position:, type: :promptBlock)
1070
+ # @param id [String]
1071
+ # @param data [Revox::Models::AssistantUpdateParams::PromptFlow::Node::Data]
1072
+ # @param position [Revox::Models::AssistantUpdateParams::PromptFlow::Node::Position]
1073
+ # @param type [Symbol, :promptBlock]
1074
+
1075
+ # @see Revox::Models::AssistantUpdateParams::PromptFlow::Node#data
1076
+ class Data < Revox::Internal::Type::BaseModel
1077
+ # @!attribute body
1078
+ #
1079
+ # @return [String]
1080
+ required :body, String
1081
+
1082
+ # @!attribute title
1083
+ #
1084
+ # @return [String]
1085
+ required :title, String
1086
+
1087
+ # @!method initialize(body:, title:)
1088
+ # @param body [String]
1089
+ # @param title [String]
1090
+ end
1091
+
1092
+ # @see Revox::Models::AssistantUpdateParams::PromptFlow::Node#position
1093
+ class Position < Revox::Internal::Type::BaseModel
1094
+ # @!attribute x
1095
+ #
1096
+ # @return [Float]
1097
+ required :x, Float
1098
+
1099
+ # @!attribute y_
1100
+ #
1101
+ # @return [Float]
1102
+ required :y_, Float, api_name: :y
1103
+
1104
+ # @!method initialize(x:, y_:)
1105
+ # @param x [Float]
1106
+ # @param y_ [Float]
1107
+ end
1108
+ end
1109
+ end
1110
+
1111
+ class Slack < Revox::Internal::Type::BaseModel
1112
+ # @!attribute channel_id
1113
+ # The Slack channel ID where the notification will be posted.
1114
+ #
1115
+ # @return [String]
1116
+ required :channel_id, String
1117
+
1118
+ # @!attribute connection_id
1119
+ # The Nango connection ID linking the org's Slack workspace to Revox.
1120
+ #
1121
+ # @return [String]
1122
+ required :connection_id, String
1123
+
1124
+ # @!attribute outcomes
1125
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
1126
+ # Use 'none' to notify when outcome is null.
1127
+ #
1128
+ # @return [Array<Symbol, Revox::Models::AssistantUpdateParams::Slack::Outcome>]
1129
+ required :outcomes,
1130
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::AssistantUpdateParams::Slack::Outcome] }
1131
+
1132
+ # @!attribute channel_name
1133
+ # Human-readable Slack channel name, cached for display in the UI.
1134
+ #
1135
+ # @return [String, nil]
1136
+ optional :channel_name, String, nil?: true
1137
+
1138
+ # @!attribute template
1139
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1140
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
1141
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
1142
+ # prompt_variables and structured_output keys. When null/empty a default template
1143
+ # is used.
1144
+ #
1145
+ # @return [String, nil]
1146
+ optional :template, String, nil?: true
1147
+
1148
+ # @!method initialize(channel_id:, connection_id:, outcomes:, channel_name: nil, template: nil)
1149
+ # Some parameter documentations has been truncated, see
1150
+ # {Revox::Models::AssistantUpdateParams::Slack} for more details.
1151
+ #
1152
+ # Slack notification config. When set, posts a message to the chosen channel after
1153
+ # a call ends with one of the configured outcomes.
1154
+ #
1155
+ # @param channel_id [String] The Slack channel ID where the notification will be posted.
1156
+ #
1157
+ # @param connection_id [String] The Nango connection ID linking the org's Slack workspace to Revox.
1158
+ #
1159
+ # @param outcomes [Array<Symbol, Revox::Models::AssistantUpdateParams::Slack::Outcome>] Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
1160
+ #
1161
+ # @param channel_name [String, nil] Human-readable Slack channel name, cached for display in the UI.
1162
+ #
1163
+ # @param template [String, nil] Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1164
+ # {{call\_
1165
+
1166
+ module Outcome
1167
+ extend Revox::Internal::Type::Enum
1168
+
1169
+ NOT_INTERESTED = :not_interested
1170
+ INTERESTED = :interested
1171
+ COMPLETED = :completed
1172
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
1173
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1174
+ DO_NOT_CONTACT = :do_not_contact
1175
+ AI_AVERSE = :ai_averse
1176
+ NONE = :none
1177
+
1178
+ # @!method self.values
1179
+ # @return [Array<Symbol>]
1180
+ end
375
1181
  end
376
1182
 
377
1183
  class StructuredOutputConfig < Revox::Internal::Type::BaseModel
@@ -423,6 +1229,87 @@ module Revox
423
1229
  end
424
1230
  end
425
1231
 
1232
+ class SttContext < Revox::Internal::Type::BaseModel
1233
+ # @!attribute general
1234
+ #
1235
+ # @return [Array<Revox::Models::AssistantUpdateParams::SttContext::General>]
1236
+ required :general,
1237
+ -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::SttContext::General] }
1238
+
1239
+ # @!attribute terms
1240
+ #
1241
+ # @return [Array<String>]
1242
+ required :terms, Revox::Internal::Type::ArrayOf[String]
1243
+
1244
+ # @!method initialize(general:, terms:)
1245
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
1246
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
1247
+ # replacing existing entries.
1248
+ #
1249
+ # @param general [Array<Revox::Models::AssistantUpdateParams::SttContext::General>]
1250
+ # @param terms [Array<String>]
1251
+
1252
+ class General < Revox::Internal::Type::BaseModel
1253
+ # @!attribute key
1254
+ #
1255
+ # @return [String]
1256
+ required :key, String
1257
+
1258
+ # @!attribute value
1259
+ #
1260
+ # @return [String]
1261
+ required :value, String
1262
+
1263
+ # @!method initialize(key:, value:)
1264
+ # @param key [String]
1265
+ # @param value [String]
1266
+ end
1267
+ end
1268
+
1269
+ # Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
1270
+ # when omitted.
1271
+ module SttModel
1272
+ extend Revox::Internal::Type::Enum
1273
+
1274
+ STT_RT_V4 = :"stt-rt-v4"
1275
+ STT_RT_V5 = :"stt-rt-v5"
1276
+
1277
+ # @!method self.values
1278
+ # @return [Array<Symbol>]
1279
+ end
1280
+
1281
+ # Audio clip to play while the agent is processing a response. One of the built-in
1282
+ # LiveKit audio clips; null/omitted disables it.
1283
+ module ThinkingSound
1284
+ extend Revox::Internal::Type::Enum
1285
+
1286
+ CITY_AMBIENCE_OGG = :"city-ambience.ogg"
1287
+ FOREST_AMBIENCE_OGG = :"forest-ambience.ogg"
1288
+ OFFICE_AMBIENCE_OGG = :"office-ambience.ogg"
1289
+ CROWDED_ROOM_OGG = :"crowded-room.ogg"
1290
+ KEYBOARD_TYPING_OGG = :"keyboard-typing.ogg"
1291
+ KEYBOARD_TYPING2_OGG = :"keyboard-typing2.ogg"
1292
+ HOLD_MUSIC_OGG = :"hold_music.ogg"
1293
+
1294
+ # @!method self.values
1295
+ # @return [Array<Symbol>]
1296
+ end
1297
+
1298
+ # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
1299
+ # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
1300
+ # multi-step flow (hidden from the assistants list). Flow transitions are managed
1301
+ # via the /assistants/:id/edges endpoints, not on the assistant itself.
1302
+ module Type
1303
+ extend Revox::Internal::Type::Enum
1304
+
1305
+ STANDALONE = :standalone
1306
+ MULTI_STEP = :"multi-step"
1307
+ SUB_ASSISTANT = :"sub-assistant"
1308
+
1309
+ # @!method self.values
1310
+ # @return [Array<Symbol>]
1311
+ end
1312
+
426
1313
  class Voice < Revox::Internal::Type::BaseModel
427
1314
  # @!attribute id
428
1315
  # The ID of the voice.
@@ -436,6 +1323,13 @@ module Revox
436
1323
  # @return [Symbol, Revox::Models::AssistantUpdateParams::Voice::Provider]
437
1324
  required :provider, enum: -> { Revox::AssistantUpdateParams::Voice::Provider }
438
1325
 
1326
+ # @!attribute model
1327
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
1328
+ # for other providers.
1329
+ #
1330
+ # @return [Symbol, Revox::Models::AssistantUpdateParams::Voice::Model, nil]
1331
+ optional :model, enum: -> { Revox::AssistantUpdateParams::Voice::Model }
1332
+
439
1333
  # @!attribute speed
440
1334
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
441
1335
  # 0.7–1.2. Default is 1.0.
@@ -443,7 +1337,14 @@ module Revox
443
1337
  # @return [Float, nil]
444
1338
  optional :speed, Float
445
1339
 
446
- # @!method initialize(id:, provider:, speed: nil)
1340
+ # @!attribute volume
1341
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
1342
+ # providers.
1343
+ #
1344
+ # @return [Float, nil]
1345
+ optional :volume, Float
1346
+
1347
+ # @!method initialize(id:, provider:, model: nil, speed: nil, volume: nil)
447
1348
  # Some parameter documentations has been truncated, see
448
1349
  # {Revox::Models::AssistantUpdateParams::Voice} for more details.
449
1350
  #
@@ -454,7 +1355,11 @@ module Revox
454
1355
  #
455
1356
  # @param provider [Symbol, Revox::Models::AssistantUpdateParams::Voice::Provider] The provider of the voice.
456
1357
  #
1358
+ # @param model [Symbol, Revox::Models::AssistantUpdateParams::Voice::Model] Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored fo
1359
+ #
457
1360
  # @param speed [Float] The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
1361
+ #
1362
+ # @param volume [Float] Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other pro
458
1363
 
459
1364
  # The provider of the voice.
460
1365
  #
@@ -468,6 +1373,126 @@ module Revox
468
1373
  # @!method self.values
469
1374
  # @return [Array<Symbol>]
470
1375
  end
1376
+
1377
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
1378
+ # for other providers.
1379
+ #
1380
+ # @see Revox::Models::AssistantUpdateParams::Voice#model
1381
+ module Model
1382
+ extend Revox::Internal::Type::Enum
1383
+
1384
+ SONIC_3 = :"sonic-3"
1385
+ SONIC_3_5 = :"sonic-3.5"
1386
+
1387
+ # @!method self.values
1388
+ # @return [Array<Symbol>]
1389
+ end
1390
+ end
1391
+
1392
+ class Zoho < Revox::Internal::Type::BaseModel
1393
+ # @!attribute connection_id
1394
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
1395
+ #
1396
+ # @return [String]
1397
+ required :connection_id, String
1398
+
1399
+ # @!attribute field_mapping
1400
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
1401
+ # field API names on the upserted record.
1402
+ #
1403
+ # @return [Array<Revox::Models::AssistantUpdateParams::Zoho::FieldMapping>]
1404
+ required :field_mapping,
1405
+ -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::Zoho::FieldMapping] }
1406
+
1407
+ # @!attribute log_call_activity
1408
+ # When true, also log the call as a record in Zoho's Calls module (related to the
1409
+ # upserted prospect via Who_Id).
1410
+ #
1411
+ # @return [Boolean]
1412
+ required :log_call_activity, Revox::Internal::Type::Boolean
1413
+
1414
+ # @!attribute module_
1415
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
1416
+ #
1417
+ # @return [String]
1418
+ required :module_, String, api_name: :module
1419
+
1420
+ # @!attribute outcomes
1421
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
1422
+ # 'none' to push when outcome is null.
1423
+ #
1424
+ # @return [Array<Symbol, Revox::Models::AssistantUpdateParams::Zoho::Outcome>]
1425
+ required :outcomes,
1426
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::AssistantUpdateParams::Zoho::Outcome] }
1427
+
1428
+ # @!attribute template
1429
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
1430
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
1431
+ # prompt_variables and structured_output keys. When null/empty a default note
1432
+ # (outcome + summary + auto-listed extracted fields) is used.
1433
+ #
1434
+ # @return [String, nil]
1435
+ optional :template, String, nil?: true
1436
+
1437
+ # @!method initialize(connection_id:, field_mapping:, log_call_activity:, module_:, outcomes:, template: nil)
1438
+ # Some parameter documentations has been truncated, see
1439
+ # {Revox::Models::AssistantUpdateParams::Zoho} for more details.
1440
+ #
1441
+ # Zoho CRM integration config. When set, upserts the prospect (keyed on phone)
1442
+ # into the chosen module and attaches a Note with the call summary after a call
1443
+ # ends with one of the configured outcomes.
1444
+ #
1445
+ # @param connection_id [String] The Nango connection ID linking the org's Zoho CRM account to Revox.
1446
+ #
1447
+ # @param field_mapping [Array<Revox::Models::AssistantUpdateParams::Zoho::FieldMapping>] Maps extracted call fields (structured_output / prompt variables) onto Zoho fiel
1448
+ #
1449
+ # @param log_call_activity [Boolean] When true, also log the call as a record in Zoho's Calls module (related to the
1450
+ #
1451
+ # @param module_ [String] Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
1452
+ #
1453
+ # @param outcomes [Array<Symbol, Revox::Models::AssistantUpdateParams::Zoho::Outcome>] Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use 'no
1454
+ #
1455
+ # @param template [String, nil] Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}}, {{cal
1456
+
1457
+ class FieldMapping < Revox::Internal::Type::BaseModel
1458
+ # @!attribute source
1459
+ # Source key to read from the call: a structured_output field name, falling back
1460
+ # to a prompt variable of the same name.
1461
+ #
1462
+ # @return [String]
1463
+ required :source, String
1464
+
1465
+ # @!attribute zoho_field
1466
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
1467
+ # or a custom 'Budget\_\_c').
1468
+ #
1469
+ # @return [String]
1470
+ required :zoho_field, String
1471
+
1472
+ # @!method initialize(source:, zoho_field:)
1473
+ # Some parameter documentations has been truncated, see
1474
+ # {Revox::Models::AssistantUpdateParams::Zoho::FieldMapping} for more details.
1475
+ #
1476
+ # @param source [String] Source key to read from the call: a structured_output field name, falling back t
1477
+ #
1478
+ # @param zoho_field [String] Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
1479
+ end
1480
+
1481
+ module Outcome
1482
+ extend Revox::Internal::Type::Enum
1483
+
1484
+ NOT_INTERESTED = :not_interested
1485
+ INTERESTED = :interested
1486
+ COMPLETED = :completed
1487
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
1488
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1489
+ DO_NOT_CONTACT = :do_not_contact
1490
+ AI_AVERSE = :ai_averse
1491
+ NONE = :none
1492
+
1493
+ # @!method self.values
1494
+ # @return [Array<Symbol>]
1495
+ end
471
1496
  end
472
1497
  end
473
1498
  end