revox 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +71 -0
  3. data/README.md +39 -14
  4. data/lib/revox/client.rb +15 -1
  5. data/lib/revox/internal/transport/base_client.rb +5 -0
  6. data/lib/revox/internal/util.rb +22 -7
  7. data/lib/revox/models/assistant_create_params.rb +1038 -13
  8. data/lib/revox/models/assistant_create_response.rb +1071 -11
  9. data/lib/revox/models/assistant_list_response.rb +1070 -11
  10. data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
  11. data/lib/revox/models/assistant_update_params.rb +1038 -13
  12. data/lib/revox/models/assistant_update_response.rb +1097 -12
  13. data/lib/revox/models/call_create_params.rb +1065 -13
  14. data/lib/revox/models/call_create_response.rb +1813 -101
  15. data/lib/revox/models/call_retrieve_response.rb +1815 -101
  16. data/lib/revox/models/campaign_create_params.rb +67 -2
  17. data/lib/revox/models/campaign_create_response.rb +1314 -59
  18. data/lib/revox/models/campaign_get_rows_params.rb +1 -46
  19. data/lib/revox/models/campaign_get_rows_response.rb +1837 -129
  20. data/lib/revox/models/campaign_list_response.rb +1312 -59
  21. data/lib/revox/models/campaign_retrieve_response.rb +1312 -56
  22. data/lib/revox/models/users/me_retrieve_response.rb +13 -1
  23. data/lib/revox/models/users/me_update_response.rb +13 -1
  24. data/lib/revox/models/voice_list_response.rb +55 -1
  25. data/lib/revox/models/voice_preview_params.rb +49 -1
  26. data/lib/revox/models.rb +0 -2
  27. data/lib/revox/resources/assistants.rb +116 -8
  28. data/lib/revox/resources/call.rb +0 -29
  29. data/lib/revox/resources/campaigns.rb +12 -17
  30. data/lib/revox/resources/voices.rb +16 -10
  31. data/lib/revox/version.rb +1 -1
  32. data/lib/revox.rb +0 -2
  33. data/rbi/revox/internal/util.rbi +8 -0
  34. data/rbi/revox/models/assistant_create_params.rbi +2138 -103
  35. data/rbi/revox/models/assistant_create_response.rbi +2454 -199
  36. data/rbi/revox/models/assistant_list_response.rbi +2448 -195
  37. data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
  38. data/rbi/revox/models/assistant_update_params.rbi +2138 -103
  39. data/rbi/revox/models/assistant_update_response.rbi +2504 -198
  40. data/rbi/revox/models/call_create_params.rbi +2382 -225
  41. data/rbi/revox/models/call_create_response.rbi +4104 -384
  42. data/rbi/revox/models/call_retrieve_response.rbi +4104 -382
  43. data/rbi/revox/models/campaign_create_params.rbi +136 -0
  44. data/rbi/revox/models/campaign_create_response.rbi +2911 -231
  45. data/rbi/revox/models/campaign_get_rows_params.rbi +2 -82
  46. data/rbi/revox/models/campaign_get_rows_response.rbi +4135 -410
  47. data/rbi/revox/models/campaign_list_response.rbi +2904 -230
  48. data/rbi/revox/models/campaign_retrieve_response.rbi +2911 -231
  49. data/rbi/revox/models/users/me_retrieve_response.rbi +13 -3
  50. data/rbi/revox/models/users/me_update_response.rbi +13 -3
  51. data/rbi/revox/models/voice_list_response.rbi +105 -3
  52. data/rbi/revox/models/voice_preview_params.rbi +69 -0
  53. data/rbi/revox/models.rbi +0 -2
  54. data/rbi/revox/resources/assistants.rbi +284 -8
  55. data/rbi/revox/resources/call.rbi +0 -21
  56. data/rbi/revox/resources/campaigns.rbi +12 -19
  57. data/rbi/revox/resources/voices.rbi +17 -9
  58. data/sig/revox/internal/util.rbs +4 -0
  59. data/sig/revox/models/assistant_create_params.rbs +844 -11
  60. data/sig/revox/models/assistant_create_response.rbs +860 -3
  61. data/sig/revox/models/assistant_list_response.rbs +860 -3
  62. data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
  63. data/sig/revox/models/assistant_update_params.rbs +844 -11
  64. data/sig/revox/models/assistant_update_response.rbs +886 -6
  65. data/sig/revox/models/call_create_params.rbs +847 -13
  66. data/sig/revox/models/call_create_response.rbs +1514 -34
  67. data/sig/revox/models/call_retrieve_response.rbs +1514 -34
  68. data/sig/revox/models/campaign_create_params.rbs +54 -0
  69. data/sig/revox/models/campaign_create_response.rbs +1034 -6
  70. data/sig/revox/models/campaign_get_rows_params.rbs +2 -64
  71. data/sig/revox/models/campaign_get_rows_response.rbs +1522 -54
  72. data/sig/revox/models/campaign_list_response.rbs +1034 -6
  73. data/sig/revox/models/campaign_retrieve_response.rbs +1034 -6
  74. data/sig/revox/models/users/me_retrieve_response.rbs +8 -3
  75. data/sig/revox/models/users/me_update_response.rbs +8 -3
  76. data/sig/revox/models/voice_list_response.rbs +45 -3
  77. data/sig/revox/models/voice_preview_params.rbs +42 -1
  78. data/sig/revox/models.rbs +0 -2
  79. data/sig/revox/resources/assistants.rbs +56 -2
  80. data/sig/revox/resources/call.rbs +0 -7
  81. data/sig/revox/resources/campaigns.rbs +2 -5
  82. data/sig/revox/resources/voices.rbs +4 -0
  83. metadata +2 -8
  84. data/lib/revox/models/call_list_params.rb +0 -52
  85. data/lib/revox/models/call_list_response.rb +0 -259
  86. data/rbi/revox/models/call_list_params.rbi +0 -94
  87. data/rbi/revox/models/call_list_response.rbi +0 -563
  88. data/sig/revox/models/call_list_params.rbs +0 -63
  89. data/sig/revox/models/call_list_response.rbs +0 -226
@@ -12,32 +12,81 @@ module Revox
12
12
  params(
13
13
  name: String,
14
14
  prompt: String,
15
+ after_call_sms_outcomes:
16
+ T.nilable(
17
+ T::Array[
18
+ Revox::AssistantCreateParams::AfterCallSMSOutcome::OrSymbol
19
+ ]
20
+ ),
21
+ after_call_sms_prompt: T.nilable(String),
15
22
  background_sound:
16
23
  T.nilable(Revox::AssistantCreateParams::BackgroundSound::OrSymbol),
17
- calendly: Revox::AssistantCreateParams::Calendly::OrHash,
24
+ background_sound_volume: Float,
25
+ calendly: T.nilable(Revox::AssistantCreateParams::Calendly::OrHash),
18
26
  call_retry_config:
19
27
  Revox::AssistantCreateParams::CallRetryConfig::OrHash,
28
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
29
+ custom_tools:
30
+ T.nilable(
31
+ T::Array[Revox::AssistantCreateParams::CustomTool::OrHash]
32
+ ),
33
+ email_notification_address: T.nilable(String),
34
+ email_notification_language:
35
+ Revox::AssistantCreateParams::EmailNotificationLanguage::OrSymbol,
36
+ email_notification_outcomes:
37
+ T.nilable(
38
+ T::Array[
39
+ Revox::AssistantCreateParams::EmailNotificationOutcome::OrSymbol
40
+ ]
41
+ ),
20
42
  end_of_call_sentence: String,
21
43
  faq_items: T::Array[Revox::AssistantCreateParams::FaqItem::OrHash],
22
44
  first_sentence: String,
23
45
  first_sentence_delay_ms: Integer,
24
46
  first_sentence_mode:
25
47
  Revox::AssistantCreateParams::FirstSentenceMode::OrSymbol,
48
+ from_phone_number: T.nilable(String),
49
+ human_transfer_mode:
50
+ T.nilable(
51
+ Revox::AssistantCreateParams::HumanTransferMode::OrSymbol
52
+ ),
26
53
  ivr_navigation_enabled: T::Boolean,
27
54
  llm_model:
28
55
  T.any(
29
56
  Revox::AssistantCreateParams::LlmModel::UnionMember0::OrHash,
30
- Revox::AssistantCreateParams::LlmModel::UnionMember1::OrHash
57
+ Revox::AssistantCreateParams::LlmModel::UnionMember1::OrHash,
58
+ Revox::AssistantCreateParams::LlmModel::UnionMember2::OrHash,
59
+ Revox::AssistantCreateParams::LlmModel::UnionMember3::OrHash
31
60
  ),
61
+ logo_url: T.nilable(String),
32
62
  max_call_duration_secs: Float,
63
+ max_duration_end_message: T.nilable(String),
64
+ position: T.nilable(Revox::AssistantCreateParams::Position::OrHash),
65
+ prompt_flow:
66
+ T.nilable(Revox::AssistantCreateParams::PromptFlow::OrHash),
67
+ slack: T.nilable(Revox::AssistantCreateParams::Slack::OrHash),
68
+ sms_enabled: T::Boolean,
69
+ sms_template: T.nilable(String),
33
70
  structured_output_config:
34
71
  T::Array[
35
72
  Revox::AssistantCreateParams::StructuredOutputConfig::OrHash
36
73
  ],
74
+ structured_output_prompt: T.nilable(String),
75
+ stt_context:
76
+ T.nilable(Revox::AssistantCreateParams::SttContext::OrHash),
77
+ stt_model: Revox::AssistantCreateParams::SttModel::OrSymbol,
78
+ thinking_sound:
79
+ T.nilable(Revox::AssistantCreateParams::ThinkingSound::OrSymbol),
80
+ thinking_sound_probability: Float,
81
+ thinking_sound_volume: Float,
37
82
  transfer_phone_number: T.nilable(String),
83
+ type: Revox::AssistantCreateParams::Type::OrSymbol,
38
84
  voice: Revox::AssistantCreateParams::Voice::OrHash,
39
85
  voicemail_message: T.nilable(String),
86
+ voicemail_sms_prompt: T.nilable(String),
87
+ warm_transfer_summary_instructions: T.nilable(String),
40
88
  webhook_url: String,
89
+ zoho: T.nilable(Revox::AssistantCreateParams::Zoho::OrHash),
41
90
  request_options: Revox::RequestOptions::OrHash
42
91
  ).returns(Revox::Models::AssistantCreateResponse)
43
92
  end
@@ -45,13 +94,37 @@ module Revox
45
94
  name:,
46
95
  # The prompt to use for the call. This will be given to the LLM (gpt-4.1)
47
96
  prompt:,
48
- # The background sound to play during the call. Useful to give the impression that
49
- # your AI agent is in an office, in the street, or anywhere else you want.
97
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
98
+ # after-call SMS is sent. E.g. ["interested", "completed", "none"]. Use "none"
99
+ # when outcome is null.
100
+ after_call_sms_outcomes: nil,
101
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
102
+ # placeholders. When null, no after-call SMS is sent.
103
+ after_call_sms_prompt: nil,
104
+ # Ambient background sound to play during the call. null/omitted disables it.
50
105
  background_sound: nil,
106
+ # Volume of the ambient background sound (0 = silent, 1 = max).
107
+ background_sound_volume: nil,
51
108
  calendly: nil,
52
109
  # Configuration for call retry behavior including time windows, delays, and max
53
110
  # iterations. If not provided, defaults will be used.
54
111
  call_retry_config: nil,
112
+ # Optional Cartesia pronunciation dictionary ID to use for this assistant's calls.
113
+ # Set null to unlink it.
114
+ cartesia_dictionary_pronunciation_id: nil,
115
+ # Custom API tools the assistant can call during conversations. Each tool defines
116
+ # an HTTP endpoint with variable substitution.
117
+ custom_tools: nil,
118
+ # Email address(es) to receive notifications when a call ends with a matching
119
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
120
+ # bob@y.com").
121
+ email_notification_address: nil,
122
+ # The language used for the notification email content. One of "en" or "fr".
123
+ # Defaults to "en".
124
+ email_notification_language: nil,
125
+ # Which call outcomes trigger an email notification. E.g. ["interested",
126
+ # "completed", "none"]. Use "none" when outcome is null.
127
+ email_notification_outcomes: nil,
55
128
  # Optional message to say when the agent decides to end the call.
56
129
  end_of_call_sentence: nil,
57
130
  # FAQ items to associate with this assistant. When provided, replaces all existing
@@ -66,27 +139,92 @@ module Revox
66
139
  # first_sentence will be spoken exactly as provided. "none" means the agent will
67
140
  # not speak first and will wait for the user.
68
141
  first_sentence_mode: nil,
142
+ # Override the default outbound phone number for calls placed with this assistant.
143
+ # Must be a phone number owned by the organization in E.164 format (e.g.
144
+ # +1234567890). When null, the organization's default phone number is used.
145
+ from_phone_number: nil,
146
+ # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
147
+ # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
148
+ human_transfer_mode: nil,
69
149
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
70
150
  # skip turns to navigate phone menus.
71
151
  ivr_navigation_enabled: nil,
72
152
  llm_model: nil,
153
+ # Public URL of the brand logo shown on the assistant's demo page. Upload a new
154
+ # logo via POST /assistants/:id/logo. Set explicitly to null to clear it.
155
+ logo_url: nil,
73
156
  # The maximum duration of the call in seconds. This is the maximum time the call
74
157
  # will be allowed to run.
75
158
  max_call_duration_secs: nil,
159
+ # Optional message the agent will say, without being interruptible, when the call
160
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
161
+ # not set, the call ends silently.
162
+ max_duration_end_message: nil,
163
+ # Canvas position of this assistant's node in its multi-step flow editor.
164
+ position: nil,
165
+ # Visual prompt constructor data (nodes, edges, positions). Used by the UI to
166
+ # re-open the visual editor. Does not affect call behavior — the flattened prompt
167
+ # field is what the LLM receives.
168
+ prompt_flow: nil,
169
+ # Slack notification config. When set, posts a message to the chosen channel after
170
+ # a call ends with one of the configured outcomes.
171
+ slack: nil,
172
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
173
+ # the user on the call.
174
+ sms_enabled: nil,
175
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
176
+ # instead of letting the agent generate the message. Supports {{variable}}
177
+ # placeholders.
178
+ sms_template: nil,
76
179
  # The structured output config to use for the call. This is used to extract the
77
180
  # data from the call (like email, name, company name, etc.).
78
181
  structured_output_config: nil,
182
+ # Custom prompt for structured data extraction. If not provided, a default prompt
183
+ # is used. Available variables: {{transcript}}, {{call_direction}},
184
+ # {{user_phone_number}}, {{agent_phone_number}}.
185
+ structured_output_prompt: nil,
186
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
187
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
188
+ # replacing existing entries.
189
+ stt_context: nil,
190
+ # Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
191
+ # when omitted.
192
+ stt_model: nil,
193
+ # Audio clip to play while the agent is processing a response. One of the built-in
194
+ # LiveKit audio clips; null/omitted disables it.
195
+ thinking_sound: nil,
196
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
197
+ # the agent is silent while thinking.
198
+ thinking_sound_probability: nil,
199
+ # Volume of the thinking sound (0 = silent, 1 = max).
200
+ thinking_sound_volume: nil,
79
201
  # Phone number to transfer calls to when users request to speak to a human agent
80
202
  # in E.164 format (e.g. +1234567890).
81
203
  transfer_phone_number: nil,
204
+ # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
205
+ # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
206
+ # multi-step flow (hidden from the assistants list). Flow transitions are managed
207
+ # via the /assistants/:id/edges endpoints, not on the assistant itself.
208
+ type: nil,
82
209
  # The voice to use for the call. You can get the list of voices using the /voices
83
210
  # endpoint
84
211
  voice: nil,
85
212
  # If set, when voicemail is detected the agent will speak this message then hang
86
213
  # up; if null, hang up immediately.
87
214
  voicemail_message: nil,
215
+ # SMS message to send when the call reaches voicemail. Supports {{variable}}
216
+ # placeholders. When null, no SMS is sent on voicemail.
217
+ voicemail_sms_prompt: nil,
218
+ # When using warm transfer: extra instructions for the supervisor handoff summary.
219
+ # If null or empty, the API uses the product default briefing when the call is
220
+ # loaded for the agent.
221
+ warm_transfer_summary_instructions: nil,
88
222
  # The webhook URL to call when the call is completed.
89
223
  webhook_url: nil,
224
+ # Zoho CRM integration config. When set, upserts the prospect (keyed on phone)
225
+ # into the chosen module and attaches a Note with the call summary after a call
226
+ # ends with one of the configured outcomes.
227
+ zoho: nil,
90
228
  request_options: {}
91
229
  )
92
230
  end
@@ -111,46 +249,119 @@ module Revox
111
249
  sig do
112
250
  params(
113
251
  id: String,
252
+ after_call_sms_outcomes:
253
+ T.nilable(
254
+ T::Array[
255
+ Revox::AssistantUpdateParams::AfterCallSMSOutcome::OrSymbol
256
+ ]
257
+ ),
258
+ after_call_sms_prompt: T.nilable(String),
114
259
  background_sound:
115
260
  T.nilable(Revox::AssistantUpdateParams::BackgroundSound::OrSymbol),
116
- calendly: Revox::AssistantUpdateParams::Calendly::OrHash,
261
+ background_sound_volume: Float,
262
+ calendly: T.nilable(Revox::AssistantUpdateParams::Calendly::OrHash),
117
263
  call_retry_config:
118
264
  Revox::AssistantUpdateParams::CallRetryConfig::OrHash,
265
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
266
+ custom_tools:
267
+ T.nilable(
268
+ T::Array[Revox::AssistantUpdateParams::CustomTool::OrHash]
269
+ ),
270
+ email_notification_address: T.nilable(String),
271
+ email_notification_language:
272
+ Revox::AssistantUpdateParams::EmailNotificationLanguage::OrSymbol,
273
+ email_notification_outcomes:
274
+ T.nilable(
275
+ T::Array[
276
+ Revox::AssistantUpdateParams::EmailNotificationOutcome::OrSymbol
277
+ ]
278
+ ),
119
279
  end_of_call_sentence: String,
120
280
  faq_items: T::Array[Revox::AssistantUpdateParams::FaqItem::OrHash],
121
281
  first_sentence: String,
122
282
  first_sentence_delay_ms: Integer,
123
283
  first_sentence_mode:
124
284
  Revox::AssistantUpdateParams::FirstSentenceMode::OrSymbol,
285
+ from_phone_number: T.nilable(String),
286
+ human_transfer_mode:
287
+ T.nilable(
288
+ Revox::AssistantUpdateParams::HumanTransferMode::OrSymbol
289
+ ),
125
290
  ivr_navigation_enabled: T::Boolean,
126
291
  llm_model:
127
292
  T.any(
128
293
  Revox::AssistantUpdateParams::LlmModel::UnionMember0::OrHash,
129
- Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash
294
+ Revox::AssistantUpdateParams::LlmModel::UnionMember1::OrHash,
295
+ Revox::AssistantUpdateParams::LlmModel::UnionMember2::OrHash,
296
+ Revox::AssistantUpdateParams::LlmModel::UnionMember3::OrHash
130
297
  ),
298
+ logo_url: T.nilable(String),
131
299
  max_call_duration_secs: Float,
300
+ max_duration_end_message: T.nilable(String),
132
301
  name: String,
302
+ position: T.nilable(Revox::AssistantUpdateParams::Position::OrHash),
133
303
  prompt: String,
304
+ prompt_flow:
305
+ T.nilable(Revox::AssistantUpdateParams::PromptFlow::OrHash),
306
+ slack: T.nilable(Revox::AssistantUpdateParams::Slack::OrHash),
307
+ sms_enabled: T::Boolean,
308
+ sms_template: T.nilable(String),
134
309
  structured_output_config:
135
310
  T::Array[
136
311
  Revox::AssistantUpdateParams::StructuredOutputConfig::OrHash
137
312
  ],
313
+ structured_output_prompt: T.nilable(String),
314
+ stt_context:
315
+ T.nilable(Revox::AssistantUpdateParams::SttContext::OrHash),
316
+ stt_model: Revox::AssistantUpdateParams::SttModel::OrSymbol,
317
+ thinking_sound:
318
+ T.nilable(Revox::AssistantUpdateParams::ThinkingSound::OrSymbol),
319
+ thinking_sound_probability: Float,
320
+ thinking_sound_volume: Float,
138
321
  transfer_phone_number: T.nilable(String),
322
+ type: Revox::AssistantUpdateParams::Type::OrSymbol,
139
323
  voice: Revox::AssistantUpdateParams::Voice::OrHash,
140
324
  voicemail_message: T.nilable(String),
325
+ voicemail_sms_prompt: T.nilable(String),
326
+ warm_transfer_summary_instructions: T.nilable(String),
141
327
  webhook_url: String,
328
+ zoho: T.nilable(Revox::AssistantUpdateParams::Zoho::OrHash),
142
329
  request_options: Revox::RequestOptions::OrHash
143
330
  ).returns(Revox::Models::AssistantUpdateResponse)
144
331
  end
145
332
  def update(
146
333
  id,
147
- # The background sound to play during the call. Useful to give the impression that
148
- # your AI agent is in an office, in the street, or anywhere else you want.
334
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
335
+ # after-call SMS is sent. E.g. ["interested", "completed", "none"]. Use "none"
336
+ # when outcome is null.
337
+ after_call_sms_outcomes: nil,
338
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
339
+ # placeholders. When null, no after-call SMS is sent.
340
+ after_call_sms_prompt: nil,
341
+ # Ambient background sound to play during the call. null/omitted disables it.
149
342
  background_sound: nil,
343
+ # Volume of the ambient background sound (0 = silent, 1 = max).
344
+ background_sound_volume: nil,
150
345
  calendly: nil,
151
346
  # Configuration for call retry behavior including time windows, delays, and max
152
347
  # iterations. If not provided, defaults will be used.
153
348
  call_retry_config: nil,
349
+ # Optional Cartesia pronunciation dictionary ID to use for this assistant's calls.
350
+ # Set null to unlink it.
351
+ cartesia_dictionary_pronunciation_id: nil,
352
+ # Custom API tools the assistant can call during conversations. Each tool defines
353
+ # an HTTP endpoint with variable substitution.
354
+ custom_tools: nil,
355
+ # Email address(es) to receive notifications when a call ends with a matching
356
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
357
+ # bob@y.com").
358
+ email_notification_address: nil,
359
+ # The language used for the notification email content. One of "en" or "fr".
360
+ # Defaults to "en".
361
+ email_notification_language: nil,
362
+ # Which call outcomes trigger an email notification. E.g. ["interested",
363
+ # "completed", "none"]. Use "none" when outcome is null.
364
+ email_notification_outcomes: nil,
154
365
  # Optional message to say when the agent decides to end the call.
155
366
  end_of_call_sentence: nil,
156
367
  # FAQ items to associate with this assistant. When provided, replaces all existing
@@ -165,30 +376,95 @@ module Revox
165
376
  # first_sentence will be spoken exactly as provided. "none" means the agent will
166
377
  # not speak first and will wait for the user.
167
378
  first_sentence_mode: nil,
379
+ # Override the default outbound phone number for calls placed with this assistant.
380
+ # Must be a phone number owned by the organization in E.164 format (e.g.
381
+ # +1234567890). When null, the organization's default phone number is used.
382
+ from_phone_number: nil,
383
+ # When transfer_phone_number is set: "warm" (AI bridges) or "cold" (SIP REFER;
384
+ # trunk must allow REFER/PSTN). Omit or null when transfer is disabled.
385
+ human_transfer_mode: nil,
168
386
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
169
387
  # skip turns to navigate phone menus.
170
388
  ivr_navigation_enabled: nil,
171
389
  llm_model: nil,
390
+ # Public URL of the brand logo shown on the assistant's demo page. Upload a new
391
+ # logo via POST /assistants/:id/logo. Set explicitly to null to clear it.
392
+ logo_url: nil,
172
393
  # The maximum duration of the call in seconds. This is the maximum time the call
173
394
  # will be allowed to run.
174
395
  max_call_duration_secs: nil,
396
+ # Optional message the agent will say, without being interruptible, when the call
397
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
398
+ # not set, the call ends silently.
399
+ max_duration_end_message: nil,
175
400
  name: nil,
401
+ # Canvas position of this assistant's node in its multi-step flow editor.
402
+ position: nil,
176
403
  # The prompt to use for the call. This will be given to the LLM (gpt-4.1)
177
404
  prompt: nil,
405
+ # Visual prompt constructor data (nodes, edges, positions). Used by the UI to
406
+ # re-open the visual editor. Does not affect call behavior — the flattened prompt
407
+ # field is what the LLM receives.
408
+ prompt_flow: nil,
409
+ # Slack notification config. When set, posts a message to the chosen channel after
410
+ # a call ends with one of the configured outcomes.
411
+ slack: nil,
412
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
413
+ # the user on the call.
414
+ sms_enabled: nil,
415
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
416
+ # instead of letting the agent generate the message. Supports {{variable}}
417
+ # placeholders.
418
+ sms_template: nil,
178
419
  # The structured output config to use for the call. This is used to extract the
179
420
  # data from the call (like email, name, company name, etc.).
180
421
  structured_output_config: nil,
422
+ # Custom prompt for structured data extraction. If not provided, a default prompt
423
+ # is used. Available variables: {{transcript}}, {{call_direction}},
424
+ # {{user_phone_number}}, {{agent_phone_number}}.
425
+ structured_output_prompt: nil,
426
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
427
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
428
+ # replacing existing entries.
429
+ stt_context: nil,
430
+ # Transcriber (speech-to-text) model. Defaults to the newest Soniox realtime model
431
+ # when omitted.
432
+ stt_model: nil,
433
+ # Audio clip to play while the agent is processing a response. One of the built-in
434
+ # LiveKit audio clips; null/omitted disables it.
435
+ thinking_sound: nil,
436
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
437
+ # the agent is silent while thinking.
438
+ thinking_sound_probability: nil,
439
+ # Volume of the thinking sound (0 = silent, 1 = max).
440
+ thinking_sound_volume: nil,
181
441
  # Phone number to transfer calls to when users request to speak to a human agent
182
442
  # in E.164 format (e.g. +1234567890).
183
443
  transfer_phone_number: nil,
444
+ # Assistant kind. 'standalone' (default) is a normal assistant, 'multi-step'
445
+ # orchestrates a flow of sub-assistants, 'sub-assistant' is a step inside a
446
+ # multi-step flow (hidden from the assistants list). Flow transitions are managed
447
+ # via the /assistants/:id/edges endpoints, not on the assistant itself.
448
+ type: nil,
184
449
  # The voice to use for the call. You can get the list of voices using the /voices
185
450
  # endpoint
186
451
  voice: nil,
187
452
  # If set, when voicemail is detected the agent will speak this message then hang
188
453
  # up; if null, hang up immediately.
189
454
  voicemail_message: nil,
455
+ # SMS message to send when the call reaches voicemail. Supports {{variable}}
456
+ # placeholders. When null, no SMS is sent on voicemail.
457
+ voicemail_sms_prompt: nil,
458
+ # When using warm transfer: extra instructions for the supervisor handoff summary.
459
+ # If null or empty, the API uses the product default briefing when the call is
460
+ # loaded for the agent.
461
+ warm_transfer_summary_instructions: nil,
190
462
  # The webhook URL to call when the call is completed.
191
463
  webhook_url: nil,
464
+ # Zoho CRM integration config. When set, upserts the prospect (keyed on phone)
465
+ # into the chosen module and attaches a Note with the call summary after a call
466
+ # ends with one of the configured outcomes.
467
+ zoho: nil,
192
468
  request_options: {}
193
469
  )
194
470
  end
@@ -68,27 +68,6 @@ module Revox
68
68
  )
69
69
  end
70
70
 
71
- # Retrieve a paginated list of call attempts. Each entry includes the call status,
72
- # phone number, assistant used, transcript, and timestamps. Use the page and
73
- # page_size query parameters to navigate through results.
74
- sig do
75
- params(
76
- page: Integer,
77
- page_size: Integer,
78
- statuses: T::Array[Revox::CallListParams::Status::OrSymbol],
79
- request_options: Revox::RequestOptions::OrHash
80
- ).returns(Revox::Models::CallListResponse)
81
- end
82
- def list(
83
- # The page number you want to get. Starting at 0.
84
- page:,
85
- # The number of calls to return per page.
86
- page_size:,
87
- statuses: nil,
88
- request_options: {}
89
- )
90
- end
91
-
92
71
  # @api private
93
72
  sig { params(client: Revox::Client).returns(T.attached_class) }
94
73
  def self.new(client:)
@@ -3,14 +3,15 @@
3
3
  module Revox
4
4
  module Resources
5
5
  class Campaigns
6
- # Create a new outbound calling campaign and launch it immediately. If
7
- # scheduled_at is set, all calls will be queued until the specified time instead
8
- # of starting right away.
6
+ # Create a new outbound calling campaign. By default the campaign launches
7
+ # immediately. Set launch to false to save as a draft for later review.
9
8
  sig do
10
9
  params(
11
10
  assistant_id: String,
12
11
  contacts: T::Array[Revox::CampaignCreateParams::Contact::OrHash],
12
+ launch: T::Boolean,
13
13
  name: String,
14
+ type: Revox::CampaignCreateParams::Type::OrSymbol,
14
15
  call_retry_config:
15
16
  Revox::CampaignCreateParams::CallRetryConfig::OrHash,
16
17
  from_phone_number: String,
@@ -24,8 +25,13 @@ module Revox
24
25
  assistant_id:,
25
26
  # The list of contacts to call
26
27
  contacts:,
28
+ # Whether to launch the campaign immediately. Set to false to save as a draft.
29
+ launch:,
27
30
  # The name of the campaign
28
31
  name:,
32
+ # Campaign type. 'jump_in' campaigns only dial while someone is on the campaign
33
+ # page and auto-pause when unattended.
34
+ type:,
29
35
  # Override retry configuration for calls in this campaign. If not provided, uses
30
36
  # the assistant's retry config.
31
37
  call_retry_config: nil,
@@ -95,28 +101,15 @@ module Revox
95
101
  def export_rows(id, request_options: {})
96
102
  end
97
103
 
98
- # Retrieve a paginated list of rows (contacts) for a given campaign. Supports
99
- # filtering by text query, call statuses, and call result.
104
+ # Retrieve all contact rows for a campaign. Useful for loading draft campaign data
105
+ # for editing.
100
106
  sig do
101
107
  params(
102
108
  id: String,
103
- page: Float,
104
- page_size: Float,
105
- query: String,
106
- result: Revox::CampaignGetRowsParams::Result::OrSymbol,
107
- statuses: String,
108
109
  request_options: Revox::RequestOptions::OrHash
109
110
  ).returns(Revox::Models::CampaignGetRowsResponse)
110
111
  end
111
- def get_rows(
112
- id,
113
- page:,
114
- page_size:,
115
- query: nil,
116
- result: nil,
117
- statuses: nil,
118
- request_options: {}
119
- )
112
+ def get_rows(id, request_options: {})
120
113
  end
121
114
 
122
115
  # @api private
@@ -3,8 +3,7 @@
3
3
  module Revox
4
4
  module Resources
5
5
  class Voices
6
- # Retrieve details for a single voice by its unique ID and provider. Returns the
7
- # voice name, description, and provider metadata.
6
+ # Retrieve details for a single voice by its unique ID and provider.
8
7
  sig do
9
8
  params(
10
9
  id: String,
@@ -20,10 +19,8 @@ module Revox
20
19
  )
21
20
  end
22
21
 
23
- # Retrieve the full catalog of voices available for AI calls. The list includes
24
- # voices from Cartesia and ElevenLabs, each with a name, language, accent, and
25
- # provider-specific ID. Use this endpoint to browse voices before assigning one to
26
- # an assistant or a call.
22
+ # Retrieve all voices available for AI calls, including preset voices from
23
+ # Cartesia/ElevenLabs and your organization's cloned voices.
27
24
  sig do
28
25
  params(request_options: Revox::RequestOptions::OrHash).returns(
29
26
  Revox::Models::VoiceListResponse
@@ -32,13 +29,15 @@ module Revox
32
29
  def list(request_options: {})
33
30
  end
34
31
 
35
- # Generate a short audio preview for a given voice. Provide the voice ID and
36
- # provider, and the API returns an audio/mpeg stream you can play back to hear how
37
- # the voice sounds before assigning it to an assistant.
32
+ # Generate a short audio preview for a given voice.
38
33
  sig do
39
34
  params(
40
35
  provider: Revox::VoicePreviewParams::Provider::OrSymbol,
41
36
  voice_id: String,
37
+ model: Revox::VoicePreviewParams::Model::OrSymbol,
38
+ speed: Float,
39
+ text: String,
40
+ volume: Float,
42
41
  request_options: Revox::RequestOptions::OrHash
43
42
  ).void
44
43
  end
@@ -47,6 +46,15 @@ module Revox
47
46
  provider:,
48
47
  # The voice ID to generate a preview for.
49
48
  voice_id:,
49
+ # Cartesia model for the preview. Defaults to sonic-3. Ignored for other
50
+ # providers.
51
+ model: nil,
52
+ # Speed for preview. Cartesia 0.6–1.5, ElevenLabs 0.7–1.2. Default 1.0.
53
+ speed: nil,
54
+ # Custom text for the preview. If omitted, a short default is used.
55
+ text: nil,
56
+ # Volume for Cartesia preview (0.5–2.0). Ignored for other providers.
57
+ volume: nil,
50
58
  request_options: {}
51
59
  )
52
60
  end
@@ -45,8 +45,12 @@ module Revox
45
45
  -> top?
46
46
  } -> top?
47
47
 
48
+ RFC_3986_NOT_PCHARS: Regexp
49
+
48
50
  def self?.uri_origin: (URI::Generic uri) -> String
49
51
 
52
+ def self?.encode_path: (String | Integer path) -> String
53
+
50
54
  def self?.interpolate_path: (String | ::Array[String] path) -> String
51
55
 
52
56
  def self?.decode_query: (String? query) -> ::Hash[String, ::Array[String]]