revox 0.0.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +96 -0
  3. data/README.md +88 -22
  4. data/lib/revox/client.rb +19 -1
  5. data/lib/revox/internal/transport/base_client.rb +5 -0
  6. data/lib/revox/internal/type/base_model.rb +3 -3
  7. data/lib/revox/internal/util.rb +53 -7
  8. data/lib/revox/models/assistant_create_params.rb +1036 -11
  9. data/lib/revox/models/assistant_create_response.rb +1071 -11
  10. data/lib/revox/models/assistant_delete_params.rb +7 -1
  11. data/lib/revox/models/assistant_list_response.rb +1070 -11
  12. data/lib/revox/models/assistant_retrieve_params.rb +7 -1
  13. data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
  14. data/lib/revox/models/assistant_update_params.rb +1043 -11
  15. data/lib/revox/models/assistant_update_response.rb +1097 -12
  16. data/lib/revox/models/call_create_params.rb +1063 -11
  17. data/lib/revox/models/call_create_response.rb +2507 -87
  18. data/lib/revox/models/call_retrieve_params.rb +7 -1
  19. data/lib/revox/models/call_retrieve_response.rb +2512 -87
  20. data/lib/revox/models/campaign_cancel_params.rb +20 -0
  21. data/lib/revox/models/campaign_cancel_response.rb +16 -0
  22. data/lib/revox/models/campaign_create_params.rb +239 -0
  23. data/lib/revox/models/campaign_create_response.rb +2030 -0
  24. data/lib/revox/models/campaign_delete_params.rb +20 -0
  25. data/lib/revox/models/campaign_delete_response.rb +16 -0
  26. data/lib/revox/models/campaign_export_rows_params.rb +20 -0
  27. data/lib/revox/models/campaign_export_rows_response.rb +22 -0
  28. data/lib/revox/models/campaign_get_rows_params.rb +20 -0
  29. data/lib/revox/models/campaign_get_rows_response.rb +3176 -0
  30. data/lib/revox/models/campaign_list_params.rb +14 -0
  31. data/lib/revox/models/campaign_list_response.rb +2024 -0
  32. data/lib/revox/models/campaign_retrieve_params.rb +20 -0
  33. data/lib/revox/models/campaign_retrieve_response.rb +2032 -0
  34. data/lib/revox/models/users/me_retrieve_response.rb +13 -1
  35. data/lib/revox/models/users/me_update_response.rb +13 -1
  36. data/lib/revox/models/voice_list_response.rb +55 -1
  37. data/lib/revox/models/voice_preview_params.rb +43 -3
  38. data/lib/revox/models/voice_retrieve_params.rb +7 -1
  39. data/lib/revox/models.rb +14 -2
  40. data/lib/revox/resources/assistants.rb +138 -6
  41. data/lib/revox/resources/call.rb +10 -27
  42. data/lib/revox/resources/campaigns.rb +176 -0
  43. data/lib/revox/resources/voices.rb +17 -7
  44. data/lib/revox/version.rb +1 -1
  45. data/lib/revox.rb +15 -2
  46. data/rbi/revox/client.rbi +3 -0
  47. data/rbi/revox/internal/util.rbi +28 -0
  48. data/rbi/revox/models/assistant_create_params.rbi +2135 -102
  49. data/rbi/revox/models/assistant_create_response.rbi +2454 -199
  50. data/rbi/revox/models/assistant_delete_params.rbi +11 -5
  51. data/rbi/revox/models/assistant_list_response.rbi +2448 -195
  52. data/rbi/revox/models/assistant_retrieve_params.rbi +11 -5
  53. data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
  54. data/rbi/revox/models/assistant_update_params.rbi +2139 -100
  55. data/rbi/revox/models/assistant_update_response.rbi +2504 -198
  56. data/rbi/revox/models/call_create_params.rbi +2377 -222
  57. data/rbi/revox/models/call_create_response.rbi +5840 -594
  58. data/rbi/revox/models/call_retrieve_params.rbi +11 -5
  59. data/rbi/revox/models/call_retrieve_response.rbi +5872 -618
  60. data/rbi/revox/models/campaign_cancel_params.rbi +33 -0
  61. data/rbi/revox/models/campaign_cancel_response.rbi +23 -0
  62. data/rbi/revox/models/campaign_create_params.rbi +433 -0
  63. data/rbi/revox/models/campaign_create_response.rbi +4170 -0
  64. data/rbi/revox/models/campaign_delete_params.rbi +33 -0
  65. data/rbi/revox/models/campaign_delete_response.rbi +23 -0
  66. data/rbi/revox/models/campaign_export_rows_params.rbi +33 -0
  67. data/rbi/revox/models/campaign_export_rows_response.rbi +29 -0
  68. data/rbi/revox/models/campaign_get_rows_params.rbi +33 -0
  69. data/rbi/revox/models/campaign_get_rows_response.rbi +6706 -0
  70. data/rbi/revox/models/campaign_list_params.rbi +27 -0
  71. data/rbi/revox/models/campaign_list_response.rbi +4156 -0
  72. data/rbi/revox/models/campaign_retrieve_params.rbi +33 -0
  73. data/rbi/revox/models/campaign_retrieve_response.rbi +4175 -0
  74. data/rbi/revox/models/users/me_retrieve_response.rbi +13 -3
  75. data/rbi/revox/models/users/me_update_response.rbi +13 -3
  76. data/rbi/revox/models/voice_list_response.rbi +105 -3
  77. data/rbi/revox/models/voice_preview_params.rbi +60 -2
  78. data/rbi/revox/models/voice_retrieve_params.rbi +6 -1
  79. data/rbi/revox/models.rbi +14 -2
  80. data/rbi/revox/resources/assistants.rbi +301 -6
  81. data/rbi/revox/resources/call.rbi +10 -19
  82. data/rbi/revox/resources/campaigns.rbi +121 -0
  83. data/rbi/revox/resources/voices.rbi +15 -5
  84. data/sig/revox/client.rbs +2 -0
  85. data/sig/revox/internal/util.rbs +14 -0
  86. data/sig/revox/models/assistant_create_params.rbs +841 -4
  87. data/sig/revox/models/assistant_create_response.rbs +860 -3
  88. data/sig/revox/models/assistant_delete_params.rbs +8 -3
  89. data/sig/revox/models/assistant_list_response.rbs +860 -3
  90. data/sig/revox/models/assistant_retrieve_params.rbs +8 -3
  91. data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
  92. data/sig/revox/models/assistant_update_params.rbs +846 -4
  93. data/sig/revox/models/assistant_update_response.rbs +886 -6
  94. data/sig/revox/models/call_create_params.rbs +844 -6
  95. data/sig/revox/models/call_create_response.rbs +2166 -79
  96. data/sig/revox/models/call_retrieve_params.rbs +9 -3
  97. data/sig/revox/models/call_retrieve_response.rbs +2166 -79
  98. data/sig/revox/models/campaign_cancel_params.rbs +20 -0
  99. data/sig/revox/models/campaign_cancel_response.rbs +13 -0
  100. data/sig/revox/models/campaign_create_params.rbs +203 -0
  101. data/sig/revox/models/campaign_create_response.rbs +1694 -0
  102. data/sig/revox/models/campaign_delete_params.rbs +20 -0
  103. data/sig/revox/models/campaign_delete_response.rbs +13 -0
  104. data/sig/revox/models/campaign_export_rows_params.rbs +20 -0
  105. data/sig/revox/models/campaign_export_rows_response.rbs +15 -0
  106. data/sig/revox/models/campaign_get_rows_params.rbs +20 -0
  107. data/sig/revox/models/campaign_get_rows_response.rbs +2688 -0
  108. data/sig/revox/models/campaign_list_params.rbs +14 -0
  109. data/sig/revox/models/campaign_list_response.rbs +1694 -0
  110. data/sig/revox/models/campaign_retrieve_params.rbs +20 -0
  111. data/sig/revox/models/campaign_retrieve_response.rbs +1694 -0
  112. data/sig/revox/models/users/me_retrieve_response.rbs +8 -3
  113. data/sig/revox/models/users/me_update_response.rbs +8 -3
  114. data/sig/revox/models/voice_list_response.rbs +45 -3
  115. data/sig/revox/models/voice_preview_params.rbs +35 -1
  116. data/sig/revox/models/voice_retrieve_params.rbs +5 -1
  117. data/sig/revox/models.rbs +14 -2
  118. data/sig/revox/resources/assistants.rbs +54 -0
  119. data/sig/revox/resources/call.rbs +0 -6
  120. data/sig/revox/resources/campaigns.rbs +49 -0
  121. data/sig/revox/resources/voices.rbs +3 -0
  122. metadata +47 -8
  123. data/lib/revox/models/call_list_params.rb +0 -29
  124. data/lib/revox/models/call_list_response.rb +0 -197
  125. data/rbi/revox/models/call_list_params.rbi +0 -47
  126. data/rbi/revox/models/call_list_response.rbi +0 -401
  127. data/sig/revox/models/call_list_params.rbs +0 -28
  128. data/sig/revox/models/call_list_response.rbs +0 -171
@@ -97,9 +97,27 @@ module Revox
97
97
  # @return [String]
98
98
  required :prompt, String
99
99
 
100
+ # @!attribute after_call_sms_outcomes
101
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
102
+ # after-call SMS is sent. E.g. ["interested", "completed", "none"]. Use "none"
103
+ # when outcome is null.
104
+ #
105
+ # @return [Array<Symbol, Revox::Models::CallCreateParams::Assistant::AfterCallSMSOutcome>, nil]
106
+ optional :after_call_sms_outcomes,
107
+ -> {
108
+ Revox::Internal::Type::ArrayOf[enum: Revox::CallCreateParams::Assistant::AfterCallSMSOutcome]
109
+ },
110
+ nil?: true
111
+
112
+ # @!attribute after_call_sms_prompt
113
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
114
+ # placeholders. When null, no after-call SMS is sent.
115
+ #
116
+ # @return [String, nil]
117
+ optional :after_call_sms_prompt, String, nil?: true
118
+
100
119
  # @!attribute background_sound
101
- # The background sound to play during the call. Useful to give the impression that
102
- # your AI agent is in an office, in the street, or anywhere else you want.
120
+ # Ambient background sound to play during the call. null/omitted disables it.
103
121
  #
104
122
  # @return [Symbol, Revox::Models::CallCreateParams::Assistant::BackgroundSound, nil]
105
123
  optional :background_sound,
@@ -108,6 +126,12 @@ module Revox
108
126
  },
109
127
  nil?: true
110
128
 
129
+ # @!attribute background_sound_volume
130
+ # Volume of the ambient background sound (0 = silent, 1 = max).
131
+ #
132
+ # @return [Float, nil]
133
+ optional :background_sound_volume, Float
134
+
111
135
  # @!attribute calendly
112
136
  #
113
137
  # @return [Revox::Models::CallCreateParams::Assistant::Calendly, nil]
@@ -120,6 +144,49 @@ module Revox
120
144
  # @return [Revox::Models::CallCreateParams::Assistant::CallRetryConfig, nil]
121
145
  optional :call_retry_config, -> { Revox::CallCreateParams::Assistant::CallRetryConfig }
122
146
 
147
+ # @!attribute cartesia_dictionary_pronunciation_id
148
+ # Optional Cartesia pronunciation dictionary ID to use for this assistant's calls.
149
+ # Set null to unlink it.
150
+ #
151
+ # @return [String, nil]
152
+ optional :cartesia_dictionary_pronunciation_id, String, nil?: true
153
+
154
+ # @!attribute custom_tools
155
+ # Custom API tools the assistant can call during conversations. Each tool defines
156
+ # an HTTP endpoint with variable substitution.
157
+ #
158
+ # @return [Array<Revox::Models::CallCreateParams::Assistant::CustomTool>, nil]
159
+ optional :custom_tools,
160
+ -> { Revox::Internal::Type::ArrayOf[Revox::CallCreateParams::Assistant::CustomTool] },
161
+ nil?: true
162
+
163
+ # @!attribute email_notification_address
164
+ # Email address(es) to receive notifications when a call ends with a matching
165
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
166
+ # bob@y.com").
167
+ #
168
+ # @return [String, nil]
169
+ optional :email_notification_address, String, nil?: true
170
+
171
+ # @!attribute email_notification_language
172
+ # The language used for the notification email content. One of "en" or "fr".
173
+ # Defaults to "en".
174
+ #
175
+ # @return [Symbol, Revox::Models::CallCreateParams::Assistant::EmailNotificationLanguage, nil]
176
+ optional :email_notification_language,
177
+ enum: -> { Revox::CallCreateParams::Assistant::EmailNotificationLanguage }
178
+
179
+ # @!attribute email_notification_outcomes
180
+ # Which call outcomes trigger an email notification. E.g. ["interested",
181
+ # "completed", "none"]. Use "none" when outcome is null.
182
+ #
183
+ # @return [Array<Symbol, Revox::Models::CallCreateParams::Assistant::EmailNotificationOutcome>, nil]
184
+ optional :email_notification_outcomes,
185
+ -> {
186
+ Revox::Internal::Type::ArrayOf[enum: Revox::CallCreateParams::Assistant::EmailNotificationOutcome]
187
+ },
188
+ nil?: true
189
+
123
190
  # @!attribute end_of_call_sentence
124
191
  # Optional message to say when the agent decides to end the call.
125
192
  #
@@ -154,6 +221,23 @@ module Revox
154
221
  # @return [Symbol, Revox::Models::CallCreateParams::Assistant::FirstSentenceMode, nil]
155
222
  optional :first_sentence_mode, enum: -> { Revox::CallCreateParams::Assistant::FirstSentenceMode }
156
223
 
224
+ # @!attribute from_phone_number
225
+ # Override the default outbound phone number for calls placed with this assistant.
226
+ # Must be a phone number owned by the organization in E.164 format (e.g.
227
+ # +1234567890). When null, the organization's default phone number is used.
228
+ #
229
+ # @return [String, nil]
230
+ optional :from_phone_number, String, nil?: true
231
+
232
+ # @!attribute human_transfer_mode
233
+ # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
234
+ # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
235
+ #
236
+ # @return [Symbol, Revox::Models::CallCreateParams::Assistant::HumanTransferMode, nil]
237
+ optional :human_transfer_mode,
238
+ enum: -> { Revox::CallCreateParams::Assistant::HumanTransferMode },
239
+ nil?: true
240
+
157
241
  # @!attribute ivr_navigation_enabled
158
242
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
159
243
  # skip turns to navigate phone menus.
@@ -163,9 +247,16 @@ module Revox
163
247
 
164
248
  # @!attribute llm_model
165
249
  #
166
- # @return [Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember0, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember1, nil]
250
+ # @return [Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember0, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember1, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember2, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember3, nil]
167
251
  optional :llm_model, union: -> { Revox::CallCreateParams::Assistant::LlmModel }
168
252
 
253
+ # @!attribute logo_url
254
+ # Public URL of the brand logo shown on the assistant's demo page. Upload a new
255
+ # logo via POST /assistants/:id/logo. Set explicitly to null to clear it.
256
+ #
257
+ # @return [String, nil]
258
+ optional :logo_url, String, nil?: true
259
+
169
260
  # @!attribute max_call_duration_secs
170
261
  # The maximum duration of the call in seconds. This is the maximum time the call
171
262
  # will be allowed to run.
@@ -173,6 +264,50 @@ module Revox
173
264
  # @return [Float, nil]
174
265
  optional :max_call_duration_secs, Float
175
266
 
267
+ # @!attribute max_duration_end_message
268
+ # Optional message the agent will say, without being interruptible, when the call
269
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
270
+ # not set, the call ends silently.
271
+ #
272
+ # @return [String, nil]
273
+ optional :max_duration_end_message, String, nil?: true
274
+
275
+ # @!attribute position
276
+ # Canvas position of this assistant's node in its multi-step flow editor.
277
+ #
278
+ # @return [Revox::Models::CallCreateParams::Assistant::Position, nil]
279
+ optional :position, -> { Revox::CallCreateParams::Assistant::Position }, nil?: true
280
+
281
+ # @!attribute prompt_flow
282
+ # Visual prompt constructor data (nodes, edges, positions). Used by the UI to
283
+ # re-open the visual editor. Does not affect call behavior — the flattened prompt
284
+ # field is what the LLM receives.
285
+ #
286
+ # @return [Revox::Models::CallCreateParams::Assistant::PromptFlow, nil]
287
+ optional :prompt_flow, -> { Revox::CallCreateParams::Assistant::PromptFlow }, nil?: true
288
+
289
+ # @!attribute slack
290
+ # Slack notification config. When set, posts a message to the chosen channel after
291
+ # a call ends with one of the configured outcomes.
292
+ #
293
+ # @return [Revox::Models::CallCreateParams::Assistant::Slack, nil]
294
+ optional :slack, -> { Revox::CallCreateParams::Assistant::Slack }, nil?: true
295
+
296
+ # @!attribute sms_enabled
297
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
298
+ # the user on the call.
299
+ #
300
+ # @return [Boolean, nil]
301
+ optional :sms_enabled, Revox::Internal::Type::Boolean
302
+
303
+ # @!attribute sms_template
304
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
305
+ # instead of letting the agent generate the message. Supports {{variable}}
306
+ # placeholders.
307
+ #
308
+ # @return [String, nil]
309
+ optional :sms_template, String, nil?: true
310
+
176
311
  # @!attribute structured_output_config
177
312
  # The structured output config to use for the call. This is used to extract the
178
313
  # data from the call (like email, name, company name, etc.).
@@ -181,6 +316,49 @@ module Revox
181
316
  optional :structured_output_config,
182
317
  -> { Revox::Internal::Type::ArrayOf[Revox::CallCreateParams::Assistant::StructuredOutputConfig] }
183
318
 
319
+ # @!attribute structured_output_prompt
320
+ # Custom prompt for structured data extraction. If not provided, a default prompt
321
+ # is used. Available variables: {{transcript}}, {{call_direction}},
322
+ # {{user_phone_number}}, {{agent_phone_number}}.
323
+ #
324
+ # @return [String, nil]
325
+ optional :structured_output_prompt, String, nil?: true
326
+
327
+ # @!attribute stt_context
328
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
329
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
330
+ # replacing existing entries.
331
+ #
332
+ # @return [Revox::Models::CallCreateParams::Assistant::SttContext, nil]
333
+ optional :stt_context, -> { Revox::CallCreateParams::Assistant::SttContext }, nil?: true
334
+
335
+ # @!attribute stt_model
336
+ # Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
337
+ # when omitted.
338
+ #
339
+ # @return [Symbol, Revox::Models::CallCreateParams::Assistant::SttModel, nil]
340
+ optional :stt_model, enum: -> { Revox::CallCreateParams::Assistant::SttModel }
341
+
342
+ # @!attribute thinking_sound
343
+ # Audio clip to play while the agent is processing a response. One of the built-in
344
+ # LiveKit audio clips; null/omitted disables it.
345
+ #
346
+ # @return [Symbol, Revox::Models::CallCreateParams::Assistant::ThinkingSound, nil]
347
+ optional :thinking_sound, enum: -> { Revox::CallCreateParams::Assistant::ThinkingSound }, nil?: true
348
+
349
+ # @!attribute thinking_sound_probability
350
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
351
+ # the agent is silent while thinking.
352
+ #
353
+ # @return [Float, nil]
354
+ optional :thinking_sound_probability, Float
355
+
356
+ # @!attribute thinking_sound_volume
357
+ # Volume of the thinking sound (0 = silent, 1 = max).
358
+ #
359
+ # @return [Float, nil]
360
+ optional :thinking_sound_volume, Float
361
+
184
362
  # @!attribute transfer_phone_number
185
363
  # Phone number to transfer calls to when users request to speak to a human agent
186
364
  # in E.164 format (e.g. +1234567890).
@@ -188,6 +366,15 @@ module Revox
188
366
  # @return [String, nil]
189
367
  optional :transfer_phone_number, String, nil?: true
190
368
 
369
+ # @!attribute type
370
+ # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
371
+ # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
372
+ # multi-step flow (hidden from the assistants list). Flow transitions are managed
373
+ # via the /assistants/:id/edges endpoints, not on the assistant itself.
374
+ #
375
+ # @return [Symbol, Revox::Models::CallCreateParams::Assistant::Type, nil]
376
+ optional :type, enum: -> { Revox::CallCreateParams::Assistant::Type }
377
+
191
378
  # @!attribute voice
192
379
  # The voice to use for the call. You can get the list of voices using the /voices
193
380
  # endpoint
@@ -202,13 +389,36 @@ module Revox
202
389
  # @return [String, nil]
203
390
  optional :voicemail_message, String, nil?: true
204
391
 
392
+ # @!attribute voicemail_sms_prompt
393
+ # SMS message to send when the call reaches voicemail. Supports {{variable}}
394
+ # placeholders. When null, no SMS is sent on voicemail.
395
+ #
396
+ # @return [String, nil]
397
+ optional :voicemail_sms_prompt, String, nil?: true
398
+
399
+ # @!attribute warm_transfer_summary_instructions
400
+ # When using warm transfer: extra instructions for the supervisor handoff summary.
401
+ # If null or empty, the API uses the product default briefing when the call is
402
+ # loaded for the agent.
403
+ #
404
+ # @return [String, nil]
405
+ optional :warm_transfer_summary_instructions, String, nil?: true
406
+
205
407
  # @!attribute webhook_url
206
408
  # The webhook URL to call when the call is completed.
207
409
  #
208
410
  # @return [String, nil]
209
411
  optional :webhook_url, String
210
412
 
211
- # @!method initialize(prompt:, 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, structured_output_config: nil, transfer_phone_number: nil, voice: nil, voicemail_message: nil, webhook_url: nil)
413
+ # @!attribute zoho
414
+ # Zoho CRM integration config. When set, upserts the prospect (keyed on phone)
415
+ # into the chosen module and attaches a Note with the call summary after a call
416
+ # ends with one of the configured outcomes.
417
+ #
418
+ # @return [Revox::Models::CallCreateParams::Assistant::Zoho, nil]
419
+ optional :zoho, -> { Revox::CallCreateParams::Assistant::Zoho }, nil?: true
420
+
421
+ # @!method initialize(prompt:, 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, position: 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)
212
422
  # Some parameter documentations has been truncated, see
213
423
  # {Revox::Models::CallCreateParams::Assistant} for more details.
214
424
  #
@@ -217,12 +427,28 @@ module Revox
217
427
  #
218
428
  # @param prompt [String] The prompt to use for the call. This will be given to the LLM (gpt-4.1)
219
429
  #
220
- # @param background_sound [Symbol, Revox::Models::CallCreateParams::Assistant::BackgroundSound, nil] The background sound to play during the call. Useful to give the impression that
430
+ # @param after_call_sms_outcomes [Array<Symbol, Revox::Models::CallCreateParams::Assistant::AfterCallSMSOutcome>, nil] Which call outcomes trigger the after-call SMS. When empty or null, no after-cal
431
+ #
432
+ # @param after_call_sms_prompt [String, nil] Prompt / instructions for the after-call SMS. Supports {{variable}} placeholders
433
+ #
434
+ # @param background_sound [Symbol, Revox::Models::CallCreateParams::Assistant::BackgroundSound, nil] Ambient background sound to play during the call. null/omitted disables it.
435
+ #
436
+ # @param background_sound_volume [Float] Volume of the ambient background sound (0 = silent, 1 = max).
221
437
  #
222
438
  # @param calendly [Revox::Models::CallCreateParams::Assistant::Calendly, nil]
223
439
  #
224
440
  # @param call_retry_config [Revox::Models::CallCreateParams::Assistant::CallRetryConfig] Configuration for call retry behavior including time windows, delays, and max it
225
441
  #
442
+ # @param cartesia_dictionary_pronunciation_id [String, nil] Optional Cartesia pronunciation dictionary ID to use for this assistant's calls.
443
+ #
444
+ # @param custom_tools [Array<Revox::Models::CallCreateParams::Assistant::CustomTool>, nil] Custom API tools the assistant can call during conversations. Each tool defines
445
+ #
446
+ # @param email_notification_address [String, nil] Email address(es) to receive notifications when a call ends with a matching outc
447
+ #
448
+ # @param email_notification_language [Symbol, Revox::Models::CallCreateParams::Assistant::EmailNotificationLanguage] The language used for the notification email content. One of "en" or "fr". Defau
449
+ #
450
+ # @param email_notification_outcomes [Array<Symbol, Revox::Models::CallCreateParams::Assistant::EmailNotificationOutcome>, nil] Which call outcomes trigger an email notification. E.g. ["interested", "complete
451
+ #
226
452
  # @param end_of_call_sentence [String] Optional message to say when the agent decides to end the call.
227
453
  #
228
454
  # @param faq_items [Array<Revox::Models::CallCreateParams::Assistant::FaqItem>] FAQ items to associate with this assistant. When provided, replaces all existing
@@ -233,24 +459,77 @@ module Revox
233
459
  #
234
460
  # @param first_sentence_mode [Symbol, Revox::Models::CallCreateParams::Assistant::FirstSentenceMode] How the first sentence should be handled. "generated" means the LLM will generat
235
461
  #
462
+ # @param from_phone_number [String, nil] Override the default outbound phone number for calls placed with this assistant.
463
+ #
464
+ # @param human_transfer_mode [Symbol, Revox::Models::CallCreateParams::Assistant::HumanTransferMode, nil] When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER; tru
465
+ #
236
466
  # @param ivr_navigation_enabled [Boolean] Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
237
467
  #
238
- # @param llm_model [Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember0, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember1]
468
+ # @param llm_model [Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember0, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember1, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember2, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember3]
469
+ #
470
+ # @param logo_url [String, nil] Public URL of the brand logo shown on the assistant's demo page. Upload a new lo
239
471
  #
240
472
  # @param max_call_duration_secs [Float] The maximum duration of the call in seconds. This is the maximum time the call w
241
473
  #
474
+ # @param max_duration_end_message [String, nil] Optional message the agent will say, without being interruptible, when the call
475
+ #
476
+ # @param position [Revox::Models::CallCreateParams::Assistant::Position, nil] Canvas position of this assistant's node in its multi-step flow editor.
477
+ #
478
+ # @param prompt_flow [Revox::Models::CallCreateParams::Assistant::PromptFlow, nil] Visual prompt constructor data (nodes, edges, positions). Used by the UI to re-o
479
+ #
480
+ # @param slack [Revox::Models::CallCreateParams::Assistant::Slack, nil] Slack notification config. When set, posts a message to the chosen channel after
481
+ #
482
+ # @param sms_enabled [Boolean] Enable SMS tool during calls. When enabled, the agent can send SMS messages to t
483
+ #
484
+ # @param sms_template [String, nil] Hardcoded SMS template to send during calls. When set, this exact text is sent i
485
+ #
242
486
  # @param structured_output_config [Array<Revox::Models::CallCreateParams::Assistant::StructuredOutputConfig>] The structured output config to use for the call. This is used to extract the da
243
487
  #
488
+ # @param structured_output_prompt [String, nil] Custom prompt for structured data extraction. If not provided, a default prompt
489
+ #
490
+ # @param stt_context [Revox::Models::CallCreateParams::Assistant::SttContext, nil] Assistant-level speech-to-text context: structured `general` key/value pairs plu
491
+ #
492
+ # @param stt_model [Symbol, Revox::Models::CallCreateParams::Assistant::SttModel] Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
493
+ #
494
+ # @param thinking_sound [Symbol, Revox::Models::CallCreateParams::Assistant::ThinkingSound, nil] Audio clip to play while the agent is processing a response. One of the built-in
495
+ #
496
+ # @param thinking_sound_probability [Float] Probability [0..1] that the thinking sound plays on any given turn; otherwise th
497
+ #
498
+ # @param thinking_sound_volume [Float] Volume of the thinking sound (0 = silent, 1 = max).
499
+ #
244
500
  # @param transfer_phone_number [String, nil] Phone number to transfer calls to when users request to speak to a human agent i
245
501
  #
502
+ # @param type [Symbol, Revox::Models::CallCreateParams::Assistant::Type] Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step' orche
503
+ #
246
504
  # @param voice [Revox::Models::CallCreateParams::Assistant::Voice] The voice to use for the call. You can get the list of voices using the /voices
247
505
  #
248
506
  # @param voicemail_message [String, nil] If set, when voicemail is detected the agent will speak this message then hang u
249
507
  #
508
+ # @param voicemail_sms_prompt [String, nil] SMS message to send when the call reaches voicemail. Supports {{variable}} place
509
+ #
510
+ # @param warm_transfer_summary_instructions [String, nil] When using warm transfer: extra instructions for the supervisor handoff summary.
511
+ #
250
512
  # @param webhook_url [String] The webhook URL to call when the call is completed.
513
+ #
514
+ # @param zoho [Revox::Models::CallCreateParams::Assistant::Zoho, nil] Zoho CRM integration config. When set, upserts the prospect (keyed on phone) int
515
+
516
+ module AfterCallSMSOutcome
517
+ extend Revox::Internal::Type::Enum
518
+
519
+ NOT_INTERESTED = :not_interested
520
+ INTERESTED = :interested
521
+ COMPLETED = :completed
522
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
523
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
524
+ DO_NOT_CONTACT = :do_not_contact
525
+ AI_AVERSE = :ai_averse
526
+ NONE = :none
527
+
528
+ # @!method self.values
529
+ # @return [Array<Symbol>]
530
+ end
251
531
 
252
- # The background sound to play during the call. Useful to give the impression that
253
- # your AI agent is in an office, in the street, or anywhere else you want.
532
+ # Ambient background sound to play during the call. null/omitted disables it.
254
533
  #
255
534
  # @see Revox::Models::CallCreateParams::Assistant#background_sound
256
535
  module BackgroundSound
@@ -288,6 +567,23 @@ module Revox
288
567
 
289
568
  # @see Revox::Models::CallCreateParams::Assistant#call_retry_config
290
569
  class CallRetryConfig < Revox::Internal::Type::BaseModel
570
+ # @!attribute allowed_days
571
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
572
+ # Monday through Friday.
573
+ #
574
+ # @return [Array<Symbol, Revox::Models::CallCreateParams::Assistant::CallRetryConfig::AllowedDay>]
575
+ required :allowed_days,
576
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::CallCreateParams::Assistant::CallRetryConfig::AllowedDay] }
577
+
578
+ # @!attribute call_twice_in_a_row
579
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
580
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
581
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
582
+ # Default: false.
583
+ #
584
+ # @return [Boolean]
585
+ required :call_twice_in_a_row, Revox::Internal::Type::Boolean
586
+
291
587
  # @!attribute calling_windows
292
588
  #
293
589
  # @return [Array<Revox::Models::CallCreateParams::Assistant::CallRetryConfig::CallingWindow>]
@@ -308,19 +604,38 @@ module Revox
308
604
  # @return [String, nil]
309
605
  optional :timezone, String, nil?: true
310
606
 
311
- # @!method initialize(calling_windows:, max_retry_attempts:, timezone: nil)
607
+ # @!method initialize(allowed_days:, call_twice_in_a_row:, calling_windows:, max_retry_attempts:, timezone: nil)
312
608
  # Some parameter documentations has been truncated, see
313
609
  # {Revox::Models::CallCreateParams::Assistant::CallRetryConfig} for more details.
314
610
  #
315
611
  # Configuration for call retry behavior including time windows, delays, and max
316
612
  # iterations. If not provided, defaults will be used.
317
613
  #
614
+ # @param allowed_days [Array<Symbol, Revox::Models::CallCreateParams::Assistant::CallRetryConfig::AllowedDay>] Days of the week when calls are allowed, in the recipient's timezone. Default: M
615
+ #
616
+ # @param call_twice_in_a_row [Boolean] If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping retr
617
+ #
318
618
  # @param calling_windows [Array<Revox::Models::CallCreateParams::Assistant::CallRetryConfig::CallingWindow>]
319
619
  #
320
620
  # @param max_retry_attempts [Integer] Maximum number of call retry attempts. Default: 3.
321
621
  #
322
622
  # @param timezone [String, nil] Optional IANA timezone identifier to override the automatic timezone detection f
323
623
 
624
+ module AllowedDay
625
+ extend Revox::Internal::Type::Enum
626
+
627
+ MONDAY = :monday
628
+ TUESDAY = :tuesday
629
+ WEDNESDAY = :wednesday
630
+ THURSDAY = :thursday
631
+ FRIDAY = :friday
632
+ SATURDAY = :saturday
633
+ SUNDAY = :sunday
634
+
635
+ # @!method self.values
636
+ # @return [Array<Symbol>]
637
+ end
638
+
324
639
  class CallingWindow < Revox::Internal::Type::BaseModel
325
640
  # @!attribute calling_window_end_time
326
641
  # End time for the calling window in the recipient's timezone (or
@@ -357,6 +672,215 @@ module Revox
357
672
  end
358
673
  end
359
674
 
675
+ class CustomTool < Revox::Internal::Type::BaseModel
676
+ # @!attribute body_template
677
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
678
+ # "{{name}}") for dynamic values
679
+ #
680
+ # @return [String, nil]
681
+ required :body_template, String, nil?: true
682
+
683
+ # @!attribute description
684
+ # Human-readable description of what the tool does, used by the LLM to decide when
685
+ # to call it
686
+ #
687
+ # @return [String]
688
+ required :description, String
689
+
690
+ # @!attribute headers
691
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
692
+ #
693
+ # @return [Array<Revox::Models::CallCreateParams::Assistant::CustomTool::Header>]
694
+ required :headers,
695
+ -> { Revox::Internal::Type::ArrayOf[Revox::CallCreateParams::Assistant::CustomTool::Header] }
696
+
697
+ # @!attribute input_schema
698
+ # Schema defining the parameters the LLM should extract from the conversation to
699
+ # pass to this tool
700
+ #
701
+ # @return [Array<Revox::Models::CallCreateParams::Assistant::CustomTool::InputSchema>]
702
+ required :input_schema,
703
+ -> { Revox::Internal::Type::ArrayOf[Revox::CallCreateParams::Assistant::CustomTool::InputSchema] }
704
+
705
+ # @!attribute method_
706
+ # HTTP method to use when calling the API endpoint
707
+ #
708
+ # @return [Symbol, Revox::Models::CallCreateParams::Assistant::CustomTool::Method]
709
+ required :method_,
710
+ enum: -> {
711
+ Revox::CallCreateParams::Assistant::CustomTool::Method
712
+ },
713
+ api_name: :method
714
+
715
+ # @!attribute name
716
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
717
+ #
718
+ # @return [String]
719
+ required :name, String
720
+
721
+ # @!attribute query_params
722
+ # Query string parameters appended to the URL. Values support {{variable}}
723
+ # placeholders
724
+ #
725
+ # @return [Array<Revox::Models::CallCreateParams::Assistant::CustomTool::QueryParam>]
726
+ required :query_params,
727
+ -> { Revox::Internal::Type::ArrayOf[Revox::CallCreateParams::Assistant::CustomTool::QueryParam] }
728
+
729
+ # @!attribute url
730
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
731
+ # values
732
+ #
733
+ # @return [String]
734
+ required :url, String
735
+
736
+ # @!method initialize(body_template:, description:, headers:, input_schema:, method_:, name:, query_params:, url:)
737
+ # Some parameter documentations has been truncated, see
738
+ # {Revox::Models::CallCreateParams::Assistant::CustomTool} for more details.
739
+ #
740
+ # @param body_template [String, nil] JSON body template for the request. Use quoted {{variable}} placeholders (e.g. "
741
+ #
742
+ # @param description [String] Human-readable description of what the tool does, used by the LLM to decide when
743
+ #
744
+ # @param headers [Array<Revox::Models::CallCreateParams::Assistant::CustomTool::Header>] HTTP headers to include in the request. Values support {{variable}} placeholders
745
+ #
746
+ # @param input_schema [Array<Revox::Models::CallCreateParams::Assistant::CustomTool::InputSchema>] Schema defining the parameters the LLM should extract from the conversation to p
747
+ #
748
+ # @param method_ [Symbol, Revox::Models::CallCreateParams::Assistant::CustomTool::Method] HTTP method to use when calling the API endpoint
749
+ #
750
+ # @param name [String] Unique tool name in lowercase_snake_case (e.g. check_inventory)
751
+ #
752
+ # @param query_params [Array<Revox::Models::CallCreateParams::Assistant::CustomTool::QueryParam>] Query string parameters appended to the URL. Values support {{variable}} placeho
753
+ #
754
+ # @param url [String] Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic val
755
+
756
+ class Header < Revox::Internal::Type::BaseModel
757
+ # @!attribute key
758
+ #
759
+ # @return [String]
760
+ required :key, String
761
+
762
+ # @!attribute value
763
+ #
764
+ # @return [String]
765
+ required :value, String
766
+
767
+ # @!method initialize(key:, value:)
768
+ # @param key [String]
769
+ # @param value [String]
770
+ end
771
+
772
+ class InputSchema < Revox::Internal::Type::BaseModel
773
+ # @!attribute name
774
+ #
775
+ # @return [String]
776
+ required :name, String
777
+
778
+ # @!attribute required
779
+ #
780
+ # @return [Boolean]
781
+ required :required, Revox::Internal::Type::Boolean
782
+
783
+ # @!attribute type
784
+ #
785
+ # @return [Symbol, Revox::Models::CallCreateParams::Assistant::CustomTool::InputSchema::Type]
786
+ required :type, enum: -> { Revox::CallCreateParams::Assistant::CustomTool::InputSchema::Type }
787
+
788
+ # @!attribute description
789
+ #
790
+ # @return [String, nil]
791
+ optional :description, String
792
+
793
+ # @!attribute enum_options
794
+ #
795
+ # @return [Array<String>, nil]
796
+ optional :enum_options, Revox::Internal::Type::ArrayOf[String]
797
+
798
+ # @!method initialize(name:, required:, type:, description: nil, enum_options: nil)
799
+ # @param name [String]
800
+ # @param required [Boolean]
801
+ # @param type [Symbol, Revox::Models::CallCreateParams::Assistant::CustomTool::InputSchema::Type]
802
+ # @param description [String]
803
+ # @param enum_options [Array<String>]
804
+
805
+ # @see Revox::Models::CallCreateParams::Assistant::CustomTool::InputSchema#type
806
+ module Type
807
+ extend Revox::Internal::Type::Enum
808
+
809
+ STRING = :string
810
+ NUMBER = :number
811
+ BOOLEAN = :boolean
812
+ ENUM = :enum
813
+ DATE = :date
814
+ DATETIME = :datetime
815
+
816
+ # @!method self.values
817
+ # @return [Array<Symbol>]
818
+ end
819
+ end
820
+
821
+ # HTTP method to use when calling the API endpoint
822
+ #
823
+ # @see Revox::Models::CallCreateParams::Assistant::CustomTool#method_
824
+ module Method
825
+ extend Revox::Internal::Type::Enum
826
+
827
+ GET = :GET
828
+ POST = :POST
829
+ PUT = :PUT
830
+ PATCH = :PATCH
831
+ DELETE = :DELETE
832
+
833
+ # @!method self.values
834
+ # @return [Array<Symbol>]
835
+ end
836
+
837
+ class QueryParam < Revox::Internal::Type::BaseModel
838
+ # @!attribute key
839
+ #
840
+ # @return [String]
841
+ required :key, String
842
+
843
+ # @!attribute value
844
+ #
845
+ # @return [String]
846
+ required :value, String
847
+
848
+ # @!method initialize(key:, value:)
849
+ # @param key [String]
850
+ # @param value [String]
851
+ end
852
+ end
853
+
854
+ # The language used for the notification email content. One of "en" or "fr".
855
+ # Defaults to "en".
856
+ #
857
+ # @see Revox::Models::CallCreateParams::Assistant#email_notification_language
858
+ module EmailNotificationLanguage
859
+ extend Revox::Internal::Type::Enum
860
+
861
+ EN = :en
862
+ FR = :fr
863
+
864
+ # @!method self.values
865
+ # @return [Array<Symbol>]
866
+ end
867
+
868
+ module EmailNotificationOutcome
869
+ extend Revox::Internal::Type::Enum
870
+
871
+ NOT_INTERESTED = :not_interested
872
+ INTERESTED = :interested
873
+ COMPLETED = :completed
874
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
875
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
876
+ DO_NOT_CONTACT = :do_not_contact
877
+ AI_AVERSE = :ai_averse
878
+ NONE = :none
879
+
880
+ # @!method self.values
881
+ # @return [Array<Symbol>]
882
+ end
883
+
360
884
  class FaqItem < Revox::Internal::Type::BaseModel
361
885
  # @!attribute answer
362
886
  #
@@ -390,6 +914,20 @@ module Revox
390
914
  # @return [Array<Symbol>]
391
915
  end
392
916
 
917
+ # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
918
+ # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
919
+ #
920
+ # @see Revox::Models::CallCreateParams::Assistant#human_transfer_mode
921
+ module HumanTransferMode
922
+ extend Revox::Internal::Type::Enum
923
+
924
+ WARM = :warm
925
+ COLD = :cold
926
+
927
+ # @!method self.values
928
+ # @return [Array<Symbol>]
929
+ end
930
+
393
931
  # @see Revox::Models::CallCreateParams::Assistant#llm_model
394
932
  module LlmModel
395
933
  extend Revox::Internal::Type::Union
@@ -398,6 +936,10 @@ module Revox
398
936
 
399
937
  variant -> { Revox::CallCreateParams::Assistant::LlmModel::UnionMember1 }
400
938
 
939
+ variant -> { Revox::CallCreateParams::Assistant::LlmModel::UnionMember2 }
940
+
941
+ variant -> { Revox::CallCreateParams::Assistant::LlmModel::UnionMember3 }
942
+
401
943
  class UnionMember0 < Revox::Internal::Type::BaseModel
402
944
  # @!attribute name
403
945
  #
@@ -452,8 +994,290 @@ module Revox
452
994
  # @param type [Symbol, :openrouter] Use a model from OpenRouter.
453
995
  end
454
996
 
997
+ class UnionMember2 < Revox::Internal::Type::BaseModel
998
+ # @!attribute api_key
999
+ # API key sent as Bearer token to the custom endpoint.
1000
+ #
1001
+ # @return [String]
1002
+ required :api_key, String
1003
+
1004
+ # @!attribute api_url
1005
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
1006
+ #
1007
+ # @return [String]
1008
+ required :api_url, String
1009
+
1010
+ # @!attribute model_name
1011
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
1012
+ #
1013
+ # @return [String]
1014
+ required :model_name, String
1015
+
1016
+ # @!attribute type
1017
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
1018
+ #
1019
+ # @return [Symbol, :custom]
1020
+ required :type, const: :custom
1021
+
1022
+ # @!method initialize(api_key:, api_url:, model_name:, type: :custom)
1023
+ # @param api_key [String] API key sent as Bearer token to the custom endpoint.
1024
+ #
1025
+ # @param api_url [String] Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
1026
+ #
1027
+ # @param model_name [String] Model name as expected by the provider, e.g. meta-llama/llama-3-70b
1028
+ #
1029
+ # @param type [Symbol, :custom] OpenAI-compatible chat completions API (bring your own endpoint and key).
1030
+ end
1031
+
1032
+ class UnionMember3 < Revox::Internal::Type::BaseModel
1033
+ # @!attribute provider
1034
+ # The provider to use from Realtime. eg: openai, google.
1035
+ #
1036
+ # @return [Symbol, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember3::Provider]
1037
+ required :provider, enum: -> { Revox::CallCreateParams::Assistant::LlmModel::UnionMember3::Provider }
1038
+
1039
+ # @!attribute realtime_model_id
1040
+ # The model ID to use from Realtime. eg: gpt-4.1
1041
+ #
1042
+ # @return [String]
1043
+ required :realtime_model_id, String
1044
+
1045
+ # @!attribute type
1046
+ # Use a model from Realtime.
1047
+ #
1048
+ # @return [Symbol, :realtime]
1049
+ required :type, const: :realtime
1050
+
1051
+ # @!attribute realtime_voice_id
1052
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
1053
+ #
1054
+ # @return [String, nil]
1055
+ optional :realtime_voice_id, String
1056
+
1057
+ # @!method initialize(provider:, realtime_model_id:, realtime_voice_id: nil, type: :realtime)
1058
+ # @param provider [Symbol, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember3::Provider] The provider to use from Realtime. eg: openai, google.
1059
+ #
1060
+ # @param realtime_model_id [String] The model ID to use from Realtime. eg: gpt-4.1
1061
+ #
1062
+ # @param realtime_voice_id [String] Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
1063
+ #
1064
+ # @param type [Symbol, :realtime] Use a model from Realtime.
1065
+
1066
+ # The provider to use from Realtime. eg: openai, google.
1067
+ #
1068
+ # @see Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember3#provider
1069
+ module Provider
1070
+ extend Revox::Internal::Type::Enum
1071
+
1072
+ OPENAI = :openai
1073
+ GOOGLE = :google
1074
+
1075
+ # @!method self.values
1076
+ # @return [Array<Symbol>]
1077
+ end
1078
+ end
1079
+
455
1080
  # @!method self.variants
456
- # @return [Array(Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember0, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember1)]
1081
+ # @return [Array(Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember0, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember1, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember2, Revox::Models::CallCreateParams::Assistant::LlmModel::UnionMember3)]
1082
+ end
1083
+
1084
+ # @see Revox::Models::CallCreateParams::Assistant#position
1085
+ class Position < Revox::Internal::Type::BaseModel
1086
+ # @!attribute x
1087
+ #
1088
+ # @return [Float]
1089
+ required :x, Float
1090
+
1091
+ # @!attribute y_
1092
+ #
1093
+ # @return [Float]
1094
+ required :y_, Float, api_name: :y
1095
+
1096
+ # @!method initialize(x:, y_:)
1097
+ # Canvas position of this assistant's node in its multi-step flow editor.
1098
+ #
1099
+ # @param x [Float]
1100
+ # @param y_ [Float]
1101
+ end
1102
+
1103
+ # @see Revox::Models::CallCreateParams::Assistant#prompt_flow
1104
+ class PromptFlow < Revox::Internal::Type::BaseModel
1105
+ # @!attribute edges
1106
+ #
1107
+ # @return [Array<Revox::Models::CallCreateParams::Assistant::PromptFlow::Edge>]
1108
+ required :edges,
1109
+ -> { Revox::Internal::Type::ArrayOf[Revox::CallCreateParams::Assistant::PromptFlow::Edge] }
1110
+
1111
+ # @!attribute nodes
1112
+ #
1113
+ # @return [Array<Revox::Models::CallCreateParams::Assistant::PromptFlow::Node>]
1114
+ required :nodes,
1115
+ -> { Revox::Internal::Type::ArrayOf[Revox::CallCreateParams::Assistant::PromptFlow::Node] }
1116
+
1117
+ # @!method initialize(edges:, nodes:)
1118
+ # Visual prompt constructor data (nodes, edges, positions). Used by the UI to
1119
+ # re-open the visual editor. Does not affect call behavior — the flattened prompt
1120
+ # field is what the LLM receives.
1121
+ #
1122
+ # @param edges [Array<Revox::Models::CallCreateParams::Assistant::PromptFlow::Edge>]
1123
+ # @param nodes [Array<Revox::Models::CallCreateParams::Assistant::PromptFlow::Node>]
1124
+
1125
+ class Edge < Revox::Internal::Type::BaseModel
1126
+ # @!attribute id
1127
+ #
1128
+ # @return [String]
1129
+ required :id, String
1130
+
1131
+ # @!attribute source
1132
+ #
1133
+ # @return [String]
1134
+ required :source, String
1135
+
1136
+ # @!attribute target
1137
+ #
1138
+ # @return [String]
1139
+ required :target, String
1140
+
1141
+ # @!method initialize(id:, source:, target:)
1142
+ # @param id [String]
1143
+ # @param source [String]
1144
+ # @param target [String]
1145
+ end
1146
+
1147
+ class Node < Revox::Internal::Type::BaseModel
1148
+ # @!attribute id
1149
+ #
1150
+ # @return [String]
1151
+ required :id, String
1152
+
1153
+ # @!attribute data
1154
+ #
1155
+ # @return [Revox::Models::CallCreateParams::Assistant::PromptFlow::Node::Data]
1156
+ required :data, -> { Revox::CallCreateParams::Assistant::PromptFlow::Node::Data }
1157
+
1158
+ # @!attribute position
1159
+ #
1160
+ # @return [Revox::Models::CallCreateParams::Assistant::PromptFlow::Node::Position]
1161
+ required :position, -> { Revox::CallCreateParams::Assistant::PromptFlow::Node::Position }
1162
+
1163
+ # @!attribute type
1164
+ #
1165
+ # @return [Symbol, :promptBlock]
1166
+ required :type, const: :promptBlock
1167
+
1168
+ # @!method initialize(id:, data:, position:, type: :promptBlock)
1169
+ # @param id [String]
1170
+ # @param data [Revox::Models::CallCreateParams::Assistant::PromptFlow::Node::Data]
1171
+ # @param position [Revox::Models::CallCreateParams::Assistant::PromptFlow::Node::Position]
1172
+ # @param type [Symbol, :promptBlock]
1173
+
1174
+ # @see Revox::Models::CallCreateParams::Assistant::PromptFlow::Node#data
1175
+ class Data < Revox::Internal::Type::BaseModel
1176
+ # @!attribute body
1177
+ #
1178
+ # @return [String]
1179
+ required :body, String
1180
+
1181
+ # @!attribute title
1182
+ #
1183
+ # @return [String]
1184
+ required :title, String
1185
+
1186
+ # @!method initialize(body:, title:)
1187
+ # @param body [String]
1188
+ # @param title [String]
1189
+ end
1190
+
1191
+ # @see Revox::Models::CallCreateParams::Assistant::PromptFlow::Node#position
1192
+ class Position < Revox::Internal::Type::BaseModel
1193
+ # @!attribute x
1194
+ #
1195
+ # @return [Float]
1196
+ required :x, Float
1197
+
1198
+ # @!attribute y_
1199
+ #
1200
+ # @return [Float]
1201
+ required :y_, Float, api_name: :y
1202
+
1203
+ # @!method initialize(x:, y_:)
1204
+ # @param x [Float]
1205
+ # @param y_ [Float]
1206
+ end
1207
+ end
1208
+ end
1209
+
1210
+ # @see Revox::Models::CallCreateParams::Assistant#slack
1211
+ class Slack < Revox::Internal::Type::BaseModel
1212
+ # @!attribute channel_id
1213
+ # The Slack channel ID where the notification will be posted.
1214
+ #
1215
+ # @return [String]
1216
+ required :channel_id, String
1217
+
1218
+ # @!attribute connection_id
1219
+ # The Nango connection ID linking the org's Slack workspace to Revox.
1220
+ #
1221
+ # @return [String]
1222
+ required :connection_id, String
1223
+
1224
+ # @!attribute outcomes
1225
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
1226
+ # Use 'none' to notify when outcome is null.
1227
+ #
1228
+ # @return [Array<Symbol, Revox::Models::CallCreateParams::Assistant::Slack::Outcome>]
1229
+ required :outcomes,
1230
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::CallCreateParams::Assistant::Slack::Outcome] }
1231
+
1232
+ # @!attribute channel_name
1233
+ # Human-readable Slack channel name, cached for display in the UI.
1234
+ #
1235
+ # @return [String, nil]
1236
+ optional :channel_name, String, nil?: true
1237
+
1238
+ # @!attribute template
1239
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1240
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
1241
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
1242
+ # prompt_variables and structured_output keys. When null/empty a default template
1243
+ # is used.
1244
+ #
1245
+ # @return [String, nil]
1246
+ optional :template, String, nil?: true
1247
+
1248
+ # @!method initialize(channel_id:, connection_id:, outcomes:, channel_name: nil, template: nil)
1249
+ # Some parameter documentations has been truncated, see
1250
+ # {Revox::Models::CallCreateParams::Assistant::Slack} for more details.
1251
+ #
1252
+ # Slack notification config. When set, posts a message to the chosen channel after
1253
+ # a call ends with one of the configured outcomes.
1254
+ #
1255
+ # @param channel_id [String] The Slack channel ID where the notification will be posted.
1256
+ #
1257
+ # @param connection_id [String] The Nango connection ID linking the org's Slack workspace to Revox.
1258
+ #
1259
+ # @param outcomes [Array<Symbol, Revox::Models::CallCreateParams::Assistant::Slack::Outcome>] Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
1260
+ #
1261
+ # @param channel_name [String, nil] Human-readable Slack channel name, cached for display in the UI.
1262
+ #
1263
+ # @param template [String, nil] Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1264
+ # {{call\_
1265
+
1266
+ module Outcome
1267
+ extend Revox::Internal::Type::Enum
1268
+
1269
+ NOT_INTERESTED = :not_interested
1270
+ INTERESTED = :interested
1271
+ COMPLETED = :completed
1272
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
1273
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1274
+ DO_NOT_CONTACT = :do_not_contact
1275
+ AI_AVERSE = :ai_averse
1276
+ NONE = :none
1277
+
1278
+ # @!method self.values
1279
+ # @return [Array<Symbol>]
1280
+ end
457
1281
  end
458
1282
 
459
1283
  class StructuredOutputConfig < Revox::Internal::Type::BaseModel
@@ -505,6 +1329,94 @@ module Revox
505
1329
  end
506
1330
  end
507
1331
 
1332
+ # @see Revox::Models::CallCreateParams::Assistant#stt_context
1333
+ class SttContext < Revox::Internal::Type::BaseModel
1334
+ # @!attribute general
1335
+ #
1336
+ # @return [Array<Revox::Models::CallCreateParams::Assistant::SttContext::General>]
1337
+ required :general,
1338
+ -> { Revox::Internal::Type::ArrayOf[Revox::CallCreateParams::Assistant::SttContext::General] }
1339
+
1340
+ # @!attribute terms
1341
+ #
1342
+ # @return [Array<String>]
1343
+ required :terms, Revox::Internal::Type::ArrayOf[String]
1344
+
1345
+ # @!method initialize(general:, terms:)
1346
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
1347
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
1348
+ # replacing existing entries.
1349
+ #
1350
+ # @param general [Array<Revox::Models::CallCreateParams::Assistant::SttContext::General>]
1351
+ # @param terms [Array<String>]
1352
+
1353
+ class General < Revox::Internal::Type::BaseModel
1354
+ # @!attribute key
1355
+ #
1356
+ # @return [String]
1357
+ required :key, String
1358
+
1359
+ # @!attribute value
1360
+ #
1361
+ # @return [String]
1362
+ required :value, String
1363
+
1364
+ # @!method initialize(key:, value:)
1365
+ # @param key [String]
1366
+ # @param value [String]
1367
+ end
1368
+ end
1369
+
1370
+ # Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
1371
+ # when omitted.
1372
+ #
1373
+ # @see Revox::Models::CallCreateParams::Assistant#stt_model
1374
+ module SttModel
1375
+ extend Revox::Internal::Type::Enum
1376
+
1377
+ STT_RT_V4 = :"stt-rt-v4"
1378
+ STT_RT_V5 = :"stt-rt-v5"
1379
+
1380
+ # @!method self.values
1381
+ # @return [Array<Symbol>]
1382
+ end
1383
+
1384
+ # Audio clip to play while the agent is processing a response. One of the built-in
1385
+ # LiveKit audio clips; null/omitted disables it.
1386
+ #
1387
+ # @see Revox::Models::CallCreateParams::Assistant#thinking_sound
1388
+ module ThinkingSound
1389
+ extend Revox::Internal::Type::Enum
1390
+
1391
+ CITY_AMBIENCE_OGG = :"city-ambience.ogg"
1392
+ FOREST_AMBIENCE_OGG = :"forest-ambience.ogg"
1393
+ OFFICE_AMBIENCE_OGG = :"office-ambience.ogg"
1394
+ CROWDED_ROOM_OGG = :"crowded-room.ogg"
1395
+ KEYBOARD_TYPING_OGG = :"keyboard-typing.ogg"
1396
+ KEYBOARD_TYPING2_OGG = :"keyboard-typing2.ogg"
1397
+ HOLD_MUSIC_OGG = :"hold_music.ogg"
1398
+
1399
+ # @!method self.values
1400
+ # @return [Array<Symbol>]
1401
+ end
1402
+
1403
+ # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
1404
+ # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
1405
+ # multi-step flow (hidden from the assistants list). Flow transitions are managed
1406
+ # via the /assistants/:id/edges endpoints, not on the assistant itself.
1407
+ #
1408
+ # @see Revox::Models::CallCreateParams::Assistant#type
1409
+ module Type
1410
+ extend Revox::Internal::Type::Enum
1411
+
1412
+ STANDALONE = :standalone
1413
+ MULTI_STEP = :"multi-step"
1414
+ SUB_ASSISTANT = :"sub-assistant"
1415
+
1416
+ # @!method self.values
1417
+ # @return [Array<Symbol>]
1418
+ end
1419
+
508
1420
  # @see Revox::Models::CallCreateParams::Assistant#voice
509
1421
  class Voice < Revox::Internal::Type::BaseModel
510
1422
  # @!attribute id
@@ -519,6 +1431,13 @@ module Revox
519
1431
  # @return [Symbol, Revox::Models::CallCreateParams::Assistant::Voice::Provider]
520
1432
  required :provider, enum: -> { Revox::CallCreateParams::Assistant::Voice::Provider }
521
1433
 
1434
+ # @!attribute model
1435
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
1436
+ # for other providers.
1437
+ #
1438
+ # @return [Symbol, Revox::Models::CallCreateParams::Assistant::Voice::Model, nil]
1439
+ optional :model, enum: -> { Revox::CallCreateParams::Assistant::Voice::Model }
1440
+
522
1441
  # @!attribute speed
523
1442
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
524
1443
  # 0.7–1.2. Default is 1.0.
@@ -526,7 +1445,14 @@ module Revox
526
1445
  # @return [Float, nil]
527
1446
  optional :speed, Float
528
1447
 
529
- # @!method initialize(id:, provider:, speed: nil)
1448
+ # @!attribute volume
1449
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
1450
+ # providers.
1451
+ #
1452
+ # @return [Float, nil]
1453
+ optional :volume, Float
1454
+
1455
+ # @!method initialize(id:, provider:, model: nil, speed: nil, volume: nil)
530
1456
  # Some parameter documentations has been truncated, see
531
1457
  # {Revox::Models::CallCreateParams::Assistant::Voice} for more details.
532
1458
  #
@@ -537,7 +1463,11 @@ module Revox
537
1463
  #
538
1464
  # @param provider [Symbol, Revox::Models::CallCreateParams::Assistant::Voice::Provider] The provider of the voice.
539
1465
  #
1466
+ # @param model [Symbol, Revox::Models::CallCreateParams::Assistant::Voice::Model] Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored fo
1467
+ #
540
1468
  # @param speed [Float] The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
1469
+ #
1470
+ # @param volume [Float] Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other pro
541
1471
 
542
1472
  # The provider of the voice.
543
1473
  #
@@ -551,6 +1481,128 @@ module Revox
551
1481
  # @!method self.values
552
1482
  # @return [Array<Symbol>]
553
1483
  end
1484
+
1485
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
1486
+ # for other providers.
1487
+ #
1488
+ # @see Revox::Models::CallCreateParams::Assistant::Voice#model
1489
+ module Model
1490
+ extend Revox::Internal::Type::Enum
1491
+
1492
+ SONIC_3 = :"sonic-3"
1493
+ SONIC_3_5 = :"sonic-3.5"
1494
+
1495
+ # @!method self.values
1496
+ # @return [Array<Symbol>]
1497
+ end
1498
+ end
1499
+
1500
+ # @see Revox::Models::CallCreateParams::Assistant#zoho
1501
+ class Zoho < Revox::Internal::Type::BaseModel
1502
+ # @!attribute connection_id
1503
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
1504
+ #
1505
+ # @return [String]
1506
+ required :connection_id, String
1507
+
1508
+ # @!attribute field_mapping
1509
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
1510
+ # field API names on the upserted record.
1511
+ #
1512
+ # @return [Array<Revox::Models::CallCreateParams::Assistant::Zoho::FieldMapping>]
1513
+ required :field_mapping,
1514
+ -> { Revox::Internal::Type::ArrayOf[Revox::CallCreateParams::Assistant::Zoho::FieldMapping] }
1515
+
1516
+ # @!attribute log_call_activity
1517
+ # When true, also log the call as a record in Zoho's Calls module (related to the
1518
+ # upserted prospect via Who_Id).
1519
+ #
1520
+ # @return [Boolean]
1521
+ required :log_call_activity, Revox::Internal::Type::Boolean
1522
+
1523
+ # @!attribute module_
1524
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
1525
+ #
1526
+ # @return [String]
1527
+ required :module_, String, api_name: :module
1528
+
1529
+ # @!attribute outcomes
1530
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
1531
+ # 'none' to push when outcome is null.
1532
+ #
1533
+ # @return [Array<Symbol, Revox::Models::CallCreateParams::Assistant::Zoho::Outcome>]
1534
+ required :outcomes,
1535
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::CallCreateParams::Assistant::Zoho::Outcome] }
1536
+
1537
+ # @!attribute template
1538
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
1539
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
1540
+ # prompt_variables and structured_output keys. When null/empty a default note
1541
+ # (outcome + summary + auto-listed extracted fields) is used.
1542
+ #
1543
+ # @return [String, nil]
1544
+ optional :template, String, nil?: true
1545
+
1546
+ # @!method initialize(connection_id:, field_mapping:, log_call_activity:, module_:, outcomes:, template: nil)
1547
+ # Some parameter documentations has been truncated, see
1548
+ # {Revox::Models::CallCreateParams::Assistant::Zoho} for more details.
1549
+ #
1550
+ # Zoho CRM integration config. When set, upserts the prospect (keyed on phone)
1551
+ # into the chosen module and attaches a Note with the call summary after a call
1552
+ # ends with one of the configured outcomes.
1553
+ #
1554
+ # @param connection_id [String] The Nango connection ID linking the org's Zoho CRM account to Revox.
1555
+ #
1556
+ # @param field_mapping [Array<Revox::Models::CallCreateParams::Assistant::Zoho::FieldMapping>] Maps extracted call fields (structured_output / prompt variables) onto Zoho fiel
1557
+ #
1558
+ # @param log_call_activity [Boolean] When true, also log the call as a record in Zoho's Calls module (related to the
1559
+ #
1560
+ # @param module_ [String] Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
1561
+ #
1562
+ # @param outcomes [Array<Symbol, Revox::Models::CallCreateParams::Assistant::Zoho::Outcome>] Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use 'no
1563
+ #
1564
+ # @param template [String, nil] Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}}, {{cal
1565
+
1566
+ class FieldMapping < Revox::Internal::Type::BaseModel
1567
+ # @!attribute source
1568
+ # Source key to read from the call: a structured_output field name, falling back
1569
+ # to a prompt variable of the same name.
1570
+ #
1571
+ # @return [String]
1572
+ required :source, String
1573
+
1574
+ # @!attribute zoho_field
1575
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
1576
+ # or a custom 'Budget\_\_c').
1577
+ #
1578
+ # @return [String]
1579
+ required :zoho_field, String
1580
+
1581
+ # @!method initialize(source:, zoho_field:)
1582
+ # Some parameter documentations has been truncated, see
1583
+ # {Revox::Models::CallCreateParams::Assistant::Zoho::FieldMapping} for more
1584
+ # details.
1585
+ #
1586
+ # @param source [String] Source key to read from the call: a structured_output field name, falling back t
1587
+ #
1588
+ # @param zoho_field [String] Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
1589
+ end
1590
+
1591
+ module Outcome
1592
+ extend Revox::Internal::Type::Enum
1593
+
1594
+ NOT_INTERESTED = :not_interested
1595
+ INTERESTED = :interested
1596
+ COMPLETED = :completed
1597
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
1598
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1599
+ DO_NOT_CONTACT = :do_not_contact
1600
+ AI_AVERSE = :ai_averse
1601
+ NONE = :none
1602
+
1603
+ # @!method self.values
1604
+ # @return [Array<Symbol>]
1605
+ end
554
1606
  end
555
1607
  end
556
1608