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
@@ -7,13 +7,40 @@ module Revox
7
7
  extend Revox::Internal::Type::RequestParameters::Converter
8
8
  include Revox::Internal::Type::RequestParameters
9
9
 
10
+ # @!attribute id
11
+ #
12
+ # @return [String]
13
+ required :id, String
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
+
10
32
  # @!attribute background_sound
11
- # The background sound to play during the call. Useful to give the impression that
12
- # 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.
13
34
  #
14
35
  # @return [Symbol, Revox::Models::AssistantUpdateParams::BackgroundSound, nil]
15
36
  optional :background_sound, enum: -> { Revox::AssistantUpdateParams::BackgroundSound }, nil?: true
16
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
+
17
44
  # @!attribute calendly
18
45
  #
19
46
  # @return [Revox::Models::AssistantUpdateParams::Calendly, nil]
@@ -26,6 +53,49 @@ module Revox
26
53
  # @return [Revox::Models::AssistantUpdateParams::CallRetryConfig, nil]
27
54
  optional :call_retry_config, -> { Revox::AssistantUpdateParams::CallRetryConfig }
28
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
+
29
99
  # @!attribute end_of_call_sentence
30
100
  # Optional message to say when the agent decides to end the call.
31
101
  #
@@ -60,6 +130,21 @@ module Revox
60
130
  # @return [Symbol, Revox::Models::AssistantUpdateParams::FirstSentenceMode, nil]
61
131
  optional :first_sentence_mode, enum: -> { Revox::AssistantUpdateParams::FirstSentenceMode }
62
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
+
63
148
  # @!attribute ivr_navigation_enabled
64
149
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
65
150
  # skip turns to navigate phone menus.
@@ -69,9 +154,16 @@ module Revox
69
154
 
70
155
  # @!attribute llm_model
71
156
  #
72
- # @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]
73
158
  optional :llm_model, union: -> { Revox::AssistantUpdateParams::LlmModel }
74
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
+
75
167
  # @!attribute max_call_duration_secs
76
168
  # The maximum duration of the call in seconds. This is the maximum time the call
77
169
  # will be allowed to run.
@@ -79,17 +171,61 @@ module Revox
79
171
  # @return [Float, nil]
80
172
  optional :max_call_duration_secs, Float
81
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
+
82
182
  # @!attribute name
83
183
  #
84
184
  # @return [String, nil]
85
185
  optional :name, String
86
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
+
87
193
  # @!attribute prompt
88
194
  # The prompt to use for the call. This will be given to the LLM (gpt-4.1)
89
195
  #
90
196
  # @return [String, nil]
91
197
  optional :prompt, String
92
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
+
93
229
  # @!attribute structured_output_config
94
230
  # The structured output config to use for the call. This is used to extract the
95
231
  # data from the call (like email, name, company name, etc.).
@@ -98,6 +234,49 @@ module Revox
98
234
  optional :structured_output_config,
99
235
  -> { Revox::Internal::Type::ArrayOf[Revox::AssistantUpdateParams::StructuredOutputConfig] }
100
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
+
101
280
  # @!attribute transfer_phone_number
102
281
  # Phone number to transfer calls to when users request to speak to a human agent
103
282
  # in E.164 format (e.g. +1234567890).
@@ -105,6 +284,15 @@ module Revox
105
284
  # @return [String, nil]
106
285
  optional :transfer_phone_number, String, nil?: true
107
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
+
108
296
  # @!attribute voice
109
297
  # The voice to use for the call. You can get the list of voices using the /voices
110
298
  # endpoint
@@ -119,22 +307,63 @@ module Revox
119
307
  # @return [String, nil]
120
308
  optional :voicemail_message, String, nil?: true
121
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
+
122
325
  # @!attribute webhook_url
123
326
  # The webhook URL to call when the call is completed.
124
327
  #
125
328
  # @return [String, nil]
126
329
  optional :webhook_url, String
127
330
 
128
- # @!method initialize(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: {})
129
340
  # Some parameter documentations has been truncated, see
130
341
  # {Revox::Models::AssistantUpdateParams} for more details.
131
342
  #
132
- # @param background_sound [Symbol, Revox::Models::AssistantUpdateParams::BackgroundSound, nil] The background sound to play during the call. Useful to give the impression that
343
+ # @param id [String]
344
+ #
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
348
+ #
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).
133
352
  #
134
353
  # @param calendly [Revox::Models::AssistantUpdateParams::Calendly, nil]
135
354
  #
136
355
  # @param call_retry_config [Revox::Models::AssistantUpdateParams::CallRetryConfig] Configuration for call retry behavior including time windows, delays, and max it
137
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
+ #
138
367
  # @param end_of_call_sentence [String] Optional message to say when the agent decides to end the call.
139
368
  #
140
369
  # @param faq_items [Array<Revox::Models::AssistantUpdateParams::FaqItem>] FAQ items to associate with this assistant. When provided, replaces all existing
@@ -145,30 +374,83 @@ module Revox
145
374
  #
146
375
  # @param first_sentence_mode [Symbol, Revox::Models::AssistantUpdateParams::FirstSentenceMode] How the first sentence should be handled. "generated" means the LLM will generat
147
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
+ #
148
381
  # @param ivr_navigation_enabled [Boolean] Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
149
382
  #
150
- # @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
151
386
  #
152
387
  # @param max_call_duration_secs [Float] The maximum duration of the call in seconds. This is the maximum time the call w
153
388
  #
389
+ # @param max_duration_end_message [String, nil] Optional message the agent will say, without being interruptible, when the call
390
+ #
154
391
  # @param name [String]
155
392
  #
393
+ # @param position [Revox::Models::AssistantUpdateParams::Position, nil] Canvas position of this assistant's node in its multi-step flow editor.
394
+ #
156
395
  # @param prompt [String] The prompt to use for the call. This will be given to the LLM (gpt-4.1)
157
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
+ #
158
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
159
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
+ #
160
419
  # @param transfer_phone_number [String, nil] Phone number to transfer calls to when users request to speak to a human agent i
161
420
  #
421
+ # @param type [Symbol, Revox::Models::AssistantUpdateParams::Type] Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step' orche
422
+ #
162
423
  # @param voice [Revox::Models::AssistantUpdateParams::Voice] The voice to use for the call. You can get the list of voices using the /voices
163
424
  #
164
425
  # @param voicemail_message [String, nil] If set, when voicemail is detected the agent will speak this message then hang u
165
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
+ #
166
431
  # @param webhook_url [String] The webhook URL to call when the call is completed.
167
432
  #
433
+ # @param zoho [Revox::Models::AssistantUpdateParams::Zoho, nil] Zoho CRM integration config. When set, upserts the prospect (keyed on phone) int
434
+ #
168
435
  # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}]
169
436
 
170
- # The background sound to play during the call. Useful to give the impression that
171
- # 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.
172
454
  module BackgroundSound
173
455
  extend Revox::Internal::Type::Enum
174
456
 
@@ -202,6 +484,23 @@ module Revox
202
484
  end
203
485
 
204
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
+
205
504
  # @!attribute calling_windows
206
505
  #
207
506
  # @return [Array<Revox::Models::AssistantUpdateParams::CallRetryConfig::CallingWindow>]
@@ -222,19 +521,38 @@ module Revox
222
521
  # @return [String, nil]
223
522
  optional :timezone, String, nil?: true
224
523
 
225
- # @!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)
226
525
  # Some parameter documentations has been truncated, see
227
526
  # {Revox::Models::AssistantUpdateParams::CallRetryConfig} for more details.
228
527
  #
229
528
  # Configuration for call retry behavior including time windows, delays, and max
230
529
  # iterations. If not provided, defaults will be used.
231
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
+ #
232
535
  # @param calling_windows [Array<Revox::Models::AssistantUpdateParams::CallRetryConfig::CallingWindow>]
233
536
  #
234
537
  # @param max_retry_attempts [Integer] Maximum number of call retry attempts. Default: 3.
235
538
  #
236
539
  # @param timezone [String, nil] Optional IANA timezone identifier to override the automatic timezone detection f
237
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
+
238
556
  class CallingWindow < Revox::Internal::Type::BaseModel
239
557
  # @!attribute calling_window_end_time
240
558
  # End time for the calling window in the recipient's timezone (or
@@ -271,6 +589,208 @@ module Revox
271
589
  end
272
590
  end
273
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
+
274
794
  class FaqItem < Revox::Internal::Type::BaseModel
275
795
  # @!attribute answer
276
796
  #
@@ -302,6 +822,18 @@ module Revox
302
822
  # @return [Array<Symbol>]
303
823
  end
304
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
+
305
837
  module LlmModel
306
838
  extend Revox::Internal::Type::Union
307
839
 
@@ -309,6 +841,10 @@ module Revox
309
841
 
310
842
  variant -> { Revox::AssistantUpdateParams::LlmModel::UnionMember1 }
311
843
 
844
+ variant -> { Revox::AssistantUpdateParams::LlmModel::UnionMember2 }
845
+
846
+ variant -> { Revox::AssistantUpdateParams::LlmModel::UnionMember3 }
847
+
312
848
  class UnionMember0 < Revox::Internal::Type::BaseModel
313
849
  # @!attribute name
314
850
  #
@@ -363,8 +899,285 @@ module Revox
363
899
  # @param type [Symbol, :openrouter] Use a model from OpenRouter.
364
900
  end
365
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
+
366
985
  # @!method self.variants
367
- # @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
368
1181
  end
369
1182
 
370
1183
  class StructuredOutputConfig < Revox::Internal::Type::BaseModel
@@ -416,6 +1229,87 @@ module Revox
416
1229
  end
417
1230
  end
418
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
+
419
1313
  class Voice < Revox::Internal::Type::BaseModel
420
1314
  # @!attribute id
421
1315
  # The ID of the voice.
@@ -429,6 +1323,13 @@ module Revox
429
1323
  # @return [Symbol, Revox::Models::AssistantUpdateParams::Voice::Provider]
430
1324
  required :provider, enum: -> { Revox::AssistantUpdateParams::Voice::Provider }
431
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
+
432
1333
  # @!attribute speed
433
1334
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
434
1335
  # 0.7–1.2. Default is 1.0.
@@ -436,7 +1337,14 @@ module Revox
436
1337
  # @return [Float, nil]
437
1338
  optional :speed, Float
438
1339
 
439
- # @!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)
440
1348
  # Some parameter documentations has been truncated, see
441
1349
  # {Revox::Models::AssistantUpdateParams::Voice} for more details.
442
1350
  #
@@ -447,7 +1355,11 @@ module Revox
447
1355
  #
448
1356
  # @param provider [Symbol, Revox::Models::AssistantUpdateParams::Voice::Provider] The provider of the voice.
449
1357
  #
1358
+ # @param model [Symbol, Revox::Models::AssistantUpdateParams::Voice::Model] Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored fo
1359
+ #
450
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
451
1363
 
452
1364
  # The provider of the voice.
453
1365
  #
@@ -461,6 +1373,126 @@ module Revox
461
1373
  # @!method self.values
462
1374
  # @return [Array<Symbol>]
463
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
464
1496
  end
465
1497
  end
466
1498
  end