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
@@ -4,31 +4,13 @@ module Revox
4
4
  module Models
5
5
  # @see Revox::Resources::Campaigns#get_rows
6
6
  class CampaignGetRowsResponse < Revox::Internal::Type::BaseModel
7
- # @!attribute page
8
- #
9
- # @return [Float]
10
- required :page, Float
11
-
12
- # @!attribute page_size
13
- #
14
- # @return [Float]
15
- required :page_size, Float
16
-
17
7
  # @!attribute rows
18
8
  #
19
9
  # @return [Array<Revox::Models::CampaignGetRowsResponse::Row>]
20
10
  required :rows, -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row] }
21
11
 
22
- # @!attribute total
23
- #
24
- # @return [Float]
25
- required :total, Float
26
-
27
- # @!method initialize(page:, page_size:, rows:, total:)
28
- # @param page [Float]
29
- # @param page_size [Float]
12
+ # @!method initialize(rows:)
30
13
  # @param rows [Array<Revox::Models::CampaignGetRowsResponse::Row>]
31
- # @param total [Float]
32
14
 
33
15
  class Row < Revox::Internal::Type::BaseModel
34
16
  # @!attribute id
@@ -80,6 +62,12 @@ module Revox
80
62
  # @return [String]
81
63
  required :id, String
82
64
 
65
+ # @!attribute assignee
66
+ # The team member responsible for following up on this call.
67
+ #
68
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assignee, nil]
69
+ required :assignee, -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assignee }, nil?: true
70
+
83
71
  # @!attribute assistant
84
72
  #
85
73
  # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant, nil]
@@ -112,6 +100,13 @@ module Revox
112
100
  # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Campaign, nil]
113
101
  required :campaign, -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Campaign }, nil?: true
114
102
 
103
+ # @!attribute contact
104
+ # Magic contact variables (prospect identity) extracted from the call's input data
105
+ # and transcript.
106
+ #
107
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Contact]
108
+ required :contact, -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Contact }
109
+
115
110
  # @!attribute created_at
116
111
  # The time the call order was created.
117
112
  #
@@ -162,7 +157,7 @@ module Revox
162
157
 
163
158
  # @!attribute llm_model
164
159
  #
165
- # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember1]
160
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember1, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember2, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember3]
166
161
  required :llm_model, union: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel }
167
162
 
168
163
  # @!attribute metadata
@@ -177,6 +172,12 @@ module Revox
177
172
  # @return [String]
178
173
  required :organization_id, String
179
174
 
175
+ # @!attribute prompt_variables
176
+ # Variables used to interpolate the prompt.
177
+ #
178
+ # @return [Hash{Symbol=>String}, nil]
179
+ required :prompt_variables, Revox::Internal::Type::HashOf[String], nil?: true
180
+
180
181
  # @!attribute scheduled_at
181
182
  # The time the call order is scheduled to start.
182
183
  #
@@ -196,7 +197,26 @@ module Revox
196
197
  # @return [String]
197
198
  required :to_phone_number, String
198
199
 
199
- # @!method initialize(id:, assistant:, call_attempts:, call_retry_config:, calls_count:, campaign:, created_at:, direction:, first_sentence_delay_ms:, from_phone_number:, is_cancelled:, is_completed:, last_call_attempt:, llm_model:, metadata:, organization_id:, scheduled_at:, status:, to_phone_number:)
200
+ # @!attribute updated_at
201
+ # The time the call order was last updated (any state change, retry, or analysis
202
+ # result).
203
+ #
204
+ # @return [Object]
205
+ required :updated_at, Revox::Internal::Type::Unknown
206
+
207
+ # @!attribute outcome
208
+ # Business outcome of the call. Null if not computed or no transcript.
209
+ #
210
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Outcome, nil]
211
+ optional :outcome, enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Outcome }, nil?: true
212
+
213
+ # @!attribute outcome_summary
214
+ # LLM explanation for the outcome, when outcome was computed from the transcript.
215
+ #
216
+ # @return [String, nil]
217
+ optional :outcome_summary, String, nil?: true
218
+
219
+ # @!method initialize(id:, assignee:, assistant:, call_attempts:, call_retry_config:, calls_count:, campaign:, contact:, created_at:, direction:, first_sentence_delay_ms:, from_phone_number:, is_cancelled:, is_completed:, last_call_attempt:, llm_model:, metadata:, organization_id:, prompt_variables:, scheduled_at:, status:, to_phone_number:, updated_at:, outcome: nil, outcome_summary: nil)
200
220
  # Some parameter documentations has been truncated, see
201
221
  # {Revox::Models::CampaignGetRowsResponse::Row::Call} for more details.
202
222
  #
@@ -205,6 +225,8 @@ module Revox
205
225
  #
206
226
  # @param id [String] The ID of the call.
207
227
  #
228
+ # @param assignee [Revox::Models::CampaignGetRowsResponse::Row::Call::Assignee, nil] The team member responsible for following up on this call.
229
+ #
208
230
  # @param assistant [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant, nil]
209
231
  #
210
232
  # @param call_attempts [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt>] All call attempts for this call order, ordered by most recent first.
@@ -215,6 +237,8 @@ module Revox
215
237
  #
216
238
  # @param campaign [Revox::Models::CampaignGetRowsResponse::Row::Call::Campaign, nil]
217
239
  #
240
+ # @param contact [Revox::Models::CampaignGetRowsResponse::Row::Call::Contact] Magic contact variables (prospect identity) extracted from the call's input data
241
+ #
218
242
  # @param created_at [Object] The time the call order was created.
219
243
  #
220
244
  # @param direction [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Direction] Whether the call is inbound or outbound.
@@ -229,17 +253,60 @@ module Revox
229
253
  #
230
254
  # @param last_call_attempt [Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt, nil] This represent a single call attempt. A call attempt is a single call made to th
231
255
  #
232
- # @param llm_model [Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember1]
256
+ # @param llm_model [Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember1, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember2, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember3]
233
257
  #
234
258
  # @param metadata [Hash{Symbol=>String}, nil] Metadata stored with the call.
235
259
  #
236
260
  # @param organization_id [String] The ID of the organization that owns the call.
237
261
  #
262
+ # @param prompt_variables [Hash{Symbol=>String}, nil] Variables used to interpolate the prompt.
263
+ #
238
264
  # @param scheduled_at [Object] The time the call order is scheduled to start.
239
265
  #
240
266
  # @param status [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Status] The status of the call.
241
267
  #
242
268
  # @param to_phone_number [String] The phone number that received the call. Formatted in E.164 format. Example: +12
269
+ #
270
+ # @param updated_at [Object] The time the call order was last updated (any state change, retry, or analysis r
271
+ #
272
+ # @param outcome [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Outcome, nil] Business outcome of the call. Null if not computed or no transcript.
273
+ #
274
+ # @param outcome_summary [String, nil] LLM explanation for the outcome, when outcome was computed from the transcript.
275
+
276
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call#assignee
277
+ class Assignee < Revox::Internal::Type::BaseModel
278
+ # @!attribute id
279
+ # The database user id of the assignee.
280
+ #
281
+ # @return [String]
282
+ required :id, String
283
+
284
+ # @!attribute email
285
+ #
286
+ # @return [String]
287
+ required :email, String
288
+
289
+ # @!attribute first_name
290
+ #
291
+ # @return [String, nil]
292
+ required :first_name, String, nil?: true
293
+
294
+ # @!attribute last_name
295
+ #
296
+ # @return [String, nil]
297
+ required :last_name, String, nil?: true
298
+
299
+ # @!method initialize(id:, email:, first_name:, last_name:)
300
+ # The team member responsible for following up on this call.
301
+ #
302
+ # @param id [String] The database user id of the assignee.
303
+ #
304
+ # @param email [String]
305
+ #
306
+ # @param first_name [String, nil]
307
+ #
308
+ # @param last_name [String, nil]
309
+ end
243
310
 
244
311
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call#assistant
245
312
  class Assistant < Revox::Internal::Type::BaseModel
@@ -248,15 +315,36 @@ module Revox
248
315
  # @return [String]
249
316
  required :id, String
250
317
 
318
+ # @!attribute after_call_sms_outcomes
319
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
320
+ # after-call SMS is sent. Use "none" when outcome is null.
321
+ #
322
+ # @return [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::AfterCallSMSOutcome>, nil]
323
+ required :after_call_sms_outcomes,
324
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::AfterCallSMSOutcome] },
325
+ nil?: true
326
+
327
+ # @!attribute after_call_sms_prompt
328
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
329
+ # placeholders. When null, no after-call SMS is sent.
330
+ #
331
+ # @return [String, nil]
332
+ required :after_call_sms_prompt, String, nil?: true
333
+
251
334
  # @!attribute background_sound
252
- # The background sound to play during the call. Useful to give the impression that
253
- # your AI agent is in an office.
335
+ # Ambient background sound to play during the call. null disables it.
254
336
  #
255
337
  # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::BackgroundSound, nil]
256
338
  required :background_sound,
257
339
  enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::BackgroundSound },
258
340
  nil?: true
259
341
 
342
+ # @!attribute background_sound_volume
343
+ # Volume of the ambient background sound (0 = silent, 1 = max).
344
+ #
345
+ # @return [Float]
346
+ required :background_sound_volume, Float
347
+
260
348
  # @!attribute calendly
261
349
  #
262
350
  # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Calendly, nil]
@@ -273,11 +361,48 @@ module Revox
273
361
  -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CallRetryConfig },
274
362
  nil?: true
275
363
 
364
+ # @!attribute cartesia_dictionary_pronunciation_id
365
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
366
+ #
367
+ # @return [String, nil]
368
+ required :cartesia_dictionary_pronunciation_id, String, nil?: true
369
+
276
370
  # @!attribute created_at
277
371
  #
278
372
  # @return [Object]
279
373
  required :created_at, Revox::Internal::Type::Unknown
280
374
 
375
+ # @!attribute custom_tools
376
+ #
377
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool>, nil]
378
+ required :custom_tools,
379
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool] },
380
+ nil?: true
381
+
382
+ # @!attribute email_notification_address
383
+ # Email address(es) to receive notifications when a call ends with a matching
384
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
385
+ # bob@y.com").
386
+ #
387
+ # @return [String, nil]
388
+ required :email_notification_address, String, nil?: true
389
+
390
+ # @!attribute email_notification_language
391
+ # The language used for the notification email content. One of "en" or "fr".
392
+ #
393
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationLanguage]
394
+ required :email_notification_language,
395
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationLanguage }
396
+
397
+ # @!attribute email_notification_outcomes
398
+ # Which call outcomes trigger an email notification. E.g. ["interested",
399
+ # "completed", "none"]. Use "none" when outcome is null.
400
+ #
401
+ # @return [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationOutcome>, nil]
402
+ required :email_notification_outcomes,
403
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationOutcome] },
404
+ nil?: true
405
+
281
406
  # @!attribute end_of_call_sentence
282
407
  #
283
408
  # @return [String, nil]
@@ -300,6 +425,22 @@ module Revox
300
425
  required :first_sentence_mode,
301
426
  enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::FirstSentenceMode }
302
427
 
428
+ # @!attribute from_phone_number
429
+ # Override the default outbound phone number for calls placed with this assistant.
430
+ # When null, the organization's default phone number is used.
431
+ #
432
+ # @return [String, nil]
433
+ required :from_phone_number, String, nil?: true
434
+
435
+ # @!attribute human_transfer_mode
436
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
437
+ # not configured.
438
+ #
439
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::HumanTransferMode, nil]
440
+ required :human_transfer_mode,
441
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::HumanTransferMode },
442
+ nil?: true
443
+
303
444
  # @!attribute ivr_navigation_enabled
304
445
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
305
446
  # skip turns to navigate phone menus.
@@ -309,9 +450,16 @@ module Revox
309
450
 
310
451
  # @!attribute llm_model
311
452
  #
312
- # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember1]
453
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember1, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember2, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember3]
313
454
  required :llm_model, union: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel }
314
455
 
456
+ # @!attribute logo_url
457
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
458
+ # unset.
459
+ #
460
+ # @return [String, nil]
461
+ required :logo_url, String, nil?: true
462
+
315
463
  # @!attribute max_call_duration_secs
316
464
  # The maximum duration of the call in seconds. This is the maximum time the call
317
465
  # will be allowed to run.
@@ -319,6 +467,14 @@ module Revox
319
467
  # @return [Float]
320
468
  required :max_call_duration_secs, Float
321
469
 
470
+ # @!attribute max_duration_end_message
471
+ # Optional message the agent will say, without being interruptible, when the call
472
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
473
+ # null, the call ends silently.
474
+ #
475
+ # @return [String, nil]
476
+ required :max_duration_end_message, String, nil?: true
477
+
322
478
  # @!attribute name
323
479
  #
324
480
  # @return [String]
@@ -329,11 +485,45 @@ module Revox
329
485
  # @return [String]
330
486
  required :organization_id, String
331
487
 
488
+ # @!attribute position
489
+ #
490
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Position, nil]
491
+ required :position,
492
+ -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Position },
493
+ nil?: true
494
+
332
495
  # @!attribute prompt
333
496
  #
334
497
  # @return [String]
335
498
  required :prompt, String
336
499
 
500
+ # @!attribute prompt_flow
501
+ #
502
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow, nil]
503
+ required :prompt_flow,
504
+ -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow },
505
+ nil?: true
506
+
507
+ # @!attribute slack
508
+ #
509
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack, nil]
510
+ required :slack, -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack }, nil?: true
511
+
512
+ # @!attribute sms_enabled
513
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
514
+ # the user on the call.
515
+ #
516
+ # @return [Boolean]
517
+ required :sms_enabled, Revox::Internal::Type::Boolean
518
+
519
+ # @!attribute sms_template
520
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
521
+ # instead of letting the agent generate the message. Supports {{variable}}
522
+ # placeholders.
523
+ #
524
+ # @return [String, nil]
525
+ required :sms_template, String, nil?: true
526
+
337
527
  # @!attribute structured_output_config
338
528
  # The structured output config to use for the call. This is used to extract the
339
529
  # data from the call (like email, name, company name, etc.).
@@ -343,12 +533,63 @@ module Revox
343
533
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::StructuredOutputConfig] },
344
534
  nil?: true
345
535
 
536
+ # @!attribute structured_output_prompt
537
+ # Custom prompt for structured data extraction. If not provided, a default prompt
538
+ # is used. Available variables: {{transcript}}, {{call_direction}},
539
+ # {{user_phone_number}}, {{agent_phone_number}}.
540
+ #
541
+ # @return [String, nil]
542
+ required :structured_output_prompt, String, nil?: true
543
+
544
+ # @!attribute stt_context
545
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
546
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
547
+ # replacing existing entries.
548
+ #
549
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::SttContext, nil]
550
+ required :stt_context,
551
+ -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::SttContext },
552
+ nil?: true
553
+
554
+ # @!attribute stt_model
555
+ # Transcriber (speech-to-text) model used for the assistant.
556
+ #
557
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::SttModel]
558
+ required :stt_model, enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::SttModel }
559
+
560
+ # @!attribute thinking_sound
561
+ # Audio clip to play while the agent is processing a response. One of the built-in
562
+ # LiveKit audio clips; null disables it.
563
+ #
564
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::ThinkingSound, nil]
565
+ required :thinking_sound,
566
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::ThinkingSound },
567
+ nil?: true
568
+
569
+ # @!attribute thinking_sound_probability
570
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
571
+ # the agent is silent while thinking.
572
+ #
573
+ # @return [Float]
574
+ required :thinking_sound_probability, Float
575
+
576
+ # @!attribute thinking_sound_volume
577
+ # Volume of the thinking sound (0 = silent, 1 = max).
578
+ #
579
+ # @return [Float]
580
+ required :thinking_sound_volume, Float
581
+
346
582
  # @!attribute transfer_phone_number
347
583
  # Phone number to transfer calls to when users request to speak to a human agent.
348
584
  #
349
585
  # @return [String, nil]
350
586
  required :transfer_phone_number, String, nil?: true
351
587
 
588
+ # @!attribute type
589
+ #
590
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Type]
591
+ required :type, enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Type }
592
+
352
593
  # @!attribute updated_at
353
594
  #
354
595
  # @return [Object]
@@ -366,37 +607,85 @@ module Revox
366
607
  # @return [String, nil]
367
608
  required :voicemail_message, String, nil?: true
368
609
 
610
+ # @!attribute voicemail_sms_prompt
611
+ # Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
612
+ # When null, no SMS is sent on voicemail.
613
+ #
614
+ # @return [String, nil]
615
+ required :voicemail_sms_prompt, String, nil?: true
616
+
617
+ # @!attribute warm_transfer_summary_instructions
618
+ # Warm transfer only: instructions for the supervisor handoff summary; null when
619
+ # not configured or cold transfer.
620
+ #
621
+ # @return [String, nil]
622
+ required :warm_transfer_summary_instructions, String, nil?: true
623
+
369
624
  # @!attribute webhook_url
370
625
  # The webhook URL to call when the call is completed.
371
626
  #
372
627
  # @return [String, nil]
373
628
  required :webhook_url, String, nil?: true
374
629
 
630
+ # @!attribute zoho
631
+ #
632
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho, nil]
633
+ required :zoho, -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho }, nil?: true
634
+
635
+ # @!attribute created_by
636
+ # The user who created the assistant.
637
+ #
638
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CreatedBy, nil]
639
+ optional :created_by,
640
+ -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CreatedBy },
641
+ nil?: true
642
+
375
643
  # @!attribute faq_items
376
644
  #
377
645
  # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::FaqItem>, nil]
378
646
  optional :faq_items,
379
647
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::FaqItem] }
380
648
 
649
+ # @!attribute is_realestate_assistant
650
+ #
651
+ # @return [Boolean, nil]
652
+ optional :is_realestate_assistant, Revox::Internal::Type::Boolean
653
+
381
654
  # @!attribute pending_faq_count
382
655
  #
383
656
  # @return [Float, nil]
384
657
  optional :pending_faq_count, Float
385
658
 
386
- # @!method initialize(id:, background_sound:, calendly:, call_retry_config:, created_at:, end_of_call_sentence:, first_sentence:, first_sentence_delay_ms:, first_sentence_mode:, ivr_navigation_enabled:, llm_model:, max_call_duration_secs:, name:, organization_id:, prompt:, structured_output_config:, transfer_phone_number:, updated_at:, voice:, voicemail_message:, webhook_url:, faq_items: nil, pending_faq_count: nil)
659
+ # @!method initialize(id:, after_call_sms_outcomes:, after_call_sms_prompt:, background_sound:, background_sound_volume:, calendly:, call_retry_config:, cartesia_dictionary_pronunciation_id:, created_at:, custom_tools:, email_notification_address:, email_notification_language:, email_notification_outcomes:, end_of_call_sentence:, first_sentence:, first_sentence_delay_ms:, first_sentence_mode:, from_phone_number:, human_transfer_mode:, ivr_navigation_enabled:, llm_model:, logo_url:, max_call_duration_secs:, max_duration_end_message:, name:, organization_id:, position:, prompt:, prompt_flow:, slack:, sms_enabled:, sms_template:, structured_output_config:, structured_output_prompt:, stt_context:, stt_model:, thinking_sound:, thinking_sound_probability:, thinking_sound_volume:, transfer_phone_number:, type:, updated_at:, voice:, voicemail_message:, voicemail_sms_prompt:, warm_transfer_summary_instructions:, webhook_url:, zoho:, created_by: nil, faq_items: nil, is_realestate_assistant: nil, pending_faq_count: nil)
387
660
  # Some parameter documentations has been truncated, see
388
661
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant} for more details.
389
662
  #
390
663
  # @param id [String]
391
664
  #
392
- # @param background_sound [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::BackgroundSound, nil] The background sound to play during the call. Useful to give the impression that
665
+ # @param after_call_sms_outcomes [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::AfterCallSMSOutcome>, nil] Which call outcomes trigger the after-call SMS. When empty or null, no after-cal
666
+ #
667
+ # @param after_call_sms_prompt [String, nil] Prompt / instructions for the after-call SMS. Supports {{variable}} placeholders
668
+ #
669
+ # @param background_sound [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::BackgroundSound, nil] Ambient background sound to play during the call. null disables it.
670
+ #
671
+ # @param background_sound_volume [Float] Volume of the ambient background sound (0 = silent, 1 = max).
393
672
  #
394
673
  # @param calendly [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Calendly, nil]
395
674
  #
396
675
  # @param call_retry_config [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CallRetryConfig, nil] Configuration for call retry behavior including time windows, delays, and max it
397
676
  #
677
+ # @param cartesia_dictionary_pronunciation_id [String, nil] Optional Cartesia pronunciation dictionary ID linked to this assistant.
678
+ #
398
679
  # @param created_at [Object]
399
680
  #
681
+ # @param custom_tools [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool>, nil]
682
+ #
683
+ # @param email_notification_address [String, nil] Email address(es) to receive notifications when a call ends with a matching outc
684
+ #
685
+ # @param email_notification_language [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationLanguage] The language used for the notification email content. One of "en" or "fr".
686
+ #
687
+ # @param email_notification_outcomes [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::EmailNotificationOutcome>, nil] Which call outcomes trigger an email notification. E.g. ["interested", "complete
688
+ #
400
689
  # @param end_of_call_sentence [String, nil]
401
690
  #
402
691
  # @param first_sentence [String, nil]
@@ -405,36 +694,93 @@ module Revox
405
694
  #
406
695
  # @param first_sentence_mode [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::FirstSentenceMode]
407
696
  #
697
+ # @param from_phone_number [String, nil] Override the default outbound phone number for calls placed with this assistant.
698
+ #
699
+ # @param human_transfer_mode [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::HumanTransferMode, nil] Warm or cold transfer when transfer_phone_number is set; null when transfer is n
700
+ #
408
701
  # @param ivr_navigation_enabled [Boolean] Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
409
702
  #
410
- # @param llm_model [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember1]
703
+ # @param llm_model [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember1, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember2, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember3]
704
+ #
705
+ # @param logo_url [String, nil] Public URL of the brand logo shown on the assistant's demo page. Null when unset
411
706
  #
412
707
  # @param max_call_duration_secs [Float] The maximum duration of the call in seconds. This is the maximum time the call w
413
708
  #
709
+ # @param max_duration_end_message [String, nil] Optional message the agent will say, without being interruptible, when the call
710
+ #
414
711
  # @param name [String]
415
712
  #
416
713
  # @param organization_id [String]
417
714
  #
715
+ # @param position [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Position, nil]
716
+ #
418
717
  # @param prompt [String]
419
718
  #
719
+ # @param prompt_flow [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow, nil]
720
+ #
721
+ # @param slack [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack, nil]
722
+ #
723
+ # @param sms_enabled [Boolean] Enable SMS tool during calls. When enabled, the agent can send SMS messages to t
724
+ #
725
+ # @param sms_template [String, nil] Hardcoded SMS template to send during calls. When set, this exact text is sent i
726
+ #
420
727
  # @param structured_output_config [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::StructuredOutputConfig>, nil] The structured output config to use for the call. This is used to extract the da
421
728
  #
729
+ # @param structured_output_prompt [String, nil] Custom prompt for structured data extraction. If not provided, a default prompt
730
+ #
731
+ # @param stt_context [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::SttContext, nil] Assistant-level speech-to-text context: structured `general` key/value pairs plu
732
+ #
733
+ # @param stt_model [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::SttModel] Transcriber (speech-to-text) model used for the assistant.
734
+ #
735
+ # @param thinking_sound [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::ThinkingSound, nil] Audio clip to play while the agent is processing a response. One of the built-in
736
+ #
737
+ # @param thinking_sound_probability [Float] Probability [0..1] that the thinking sound plays on any given turn; otherwise th
738
+ #
739
+ # @param thinking_sound_volume [Float] Volume of the thinking sound (0 = silent, 1 = max).
740
+ #
422
741
  # @param transfer_phone_number [String, nil] Phone number to transfer calls to when users request to speak to a human agent.
423
742
  #
743
+ # @param type [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Type]
744
+ #
424
745
  # @param updated_at [Object]
425
746
  #
426
747
  # @param voice [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Voice, nil]
427
748
  #
428
749
  # @param voicemail_message [String, nil] If set, when voicemail is detected the agent will speak this message then hang u
429
750
  #
751
+ # @param voicemail_sms_prompt [String, nil] Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
752
+ #
753
+ # @param warm_transfer_summary_instructions [String, nil] Warm transfer only: instructions for the supervisor handoff summary; null when n
754
+ #
430
755
  # @param webhook_url [String, nil] The webhook URL to call when the call is completed.
431
756
  #
757
+ # @param zoho [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho, nil]
758
+ #
759
+ # @param created_by [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CreatedBy, nil] The user who created the assistant.
760
+ #
432
761
  # @param faq_items [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::FaqItem>]
433
762
  #
763
+ # @param is_realestate_assistant [Boolean]
764
+ #
434
765
  # @param pending_faq_count [Float]
435
766
 
436
- # The background sound to play during the call. Useful to give the impression that
437
- # your AI agent is in an office.
767
+ module AfterCallSMSOutcome
768
+ extend Revox::Internal::Type::Enum
769
+
770
+ NOT_INTERESTED = :not_interested
771
+ INTERESTED = :interested
772
+ COMPLETED = :completed
773
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
774
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
775
+ DO_NOT_CONTACT = :do_not_contact
776
+ AI_AVERSE = :ai_averse
777
+ NONE = :none
778
+
779
+ # @!method self.values
780
+ # @return [Array<Symbol>]
781
+ end
782
+
783
+ # Ambient background sound to play during the call. null disables it.
438
784
  #
439
785
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#background_sound
440
786
  module BackgroundSound
@@ -473,6 +819,23 @@ module Revox
473
819
 
474
820
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#call_retry_config
475
821
  class CallRetryConfig < Revox::Internal::Type::BaseModel
822
+ # @!attribute allowed_days
823
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
824
+ # Monday through Friday.
825
+ #
826
+ # @return [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CallRetryConfig::AllowedDay>]
827
+ required :allowed_days,
828
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CallRetryConfig::AllowedDay] }
829
+
830
+ # @!attribute call_twice_in_a_row
831
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
832
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
833
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
834
+ # Default: false.
835
+ #
836
+ # @return [Boolean]
837
+ required :call_twice_in_a_row, Revox::Internal::Type::Boolean
838
+
476
839
  # @!attribute calling_windows
477
840
  #
478
841
  # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CallRetryConfig::CallingWindow>]
@@ -493,7 +856,7 @@ module Revox
493
856
  # @return [String, nil]
494
857
  optional :timezone, String, nil?: true
495
858
 
496
- # @!method initialize(calling_windows:, max_retry_attempts:, timezone: nil)
859
+ # @!method initialize(allowed_days:, call_twice_in_a_row:, calling_windows:, max_retry_attempts:, timezone: nil)
497
860
  # Some parameter documentations has been truncated, see
498
861
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CallRetryConfig}
499
862
  # for more details.
@@ -501,12 +864,31 @@ module Revox
501
864
  # Configuration for call retry behavior including time windows, delays, and max
502
865
  # iterations. If not provided, defaults will be used.
503
866
  #
867
+ # @param allowed_days [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CallRetryConfig::AllowedDay>] Days of the week when calls are allowed, in the recipient's timezone. Default: M
868
+ #
869
+ # @param call_twice_in_a_row [Boolean] If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping retr
870
+ #
504
871
  # @param calling_windows [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CallRetryConfig::CallingWindow>]
505
872
  #
506
873
  # @param max_retry_attempts [Integer] Maximum number of call retry attempts. Default: 3.
507
874
  #
508
875
  # @param timezone [String, nil] Optional IANA timezone identifier to override the automatic timezone detection f
509
876
 
877
+ module AllowedDay
878
+ extend Revox::Internal::Type::Enum
879
+
880
+ MONDAY = :monday
881
+ TUESDAY = :tuesday
882
+ WEDNESDAY = :wednesday
883
+ THURSDAY = :thursday
884
+ FRIDAY = :friday
885
+ SATURDAY = :saturday
886
+ SUNDAY = :sunday
887
+
888
+ # @!method self.values
889
+ # @return [Array<Symbol>]
890
+ end
891
+
510
892
  class CallingWindow < Revox::Internal::Type::BaseModel
511
893
  # @!attribute calling_window_end_time
512
894
  # End time for the calling window in the recipient's timezone (or
@@ -543,83 +925,586 @@ module Revox
543
925
  end
544
926
  end
545
927
 
546
- # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#first_sentence_mode
547
- module FirstSentenceMode
548
- extend Revox::Internal::Type::Enum
928
+ class CustomTool < Revox::Internal::Type::BaseModel
929
+ # @!attribute body_template
930
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
931
+ # "{{name}}") for dynamic values
932
+ #
933
+ # @return [String, nil]
934
+ required :body_template, String, nil?: true
549
935
 
550
- GENERATED = :generated
551
- STATIC = :static
552
- NONE = :none
936
+ # @!attribute description
937
+ # Human-readable description of what the tool does, used by the LLM to decide when
938
+ # to call it
939
+ #
940
+ # @return [String]
941
+ required :description, String
553
942
 
554
- # @!method self.values
555
- # @return [Array<Symbol>]
556
- end
943
+ # @!attribute headers
944
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
945
+ #
946
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::Header>]
947
+ required :headers,
948
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::Header] }
557
949
 
558
- # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#llm_model
559
- module LlmModel
560
- extend Revox::Internal::Type::Union
950
+ # @!attribute input_schema
951
+ # Schema defining the parameters the LLM should extract from the conversation to
952
+ # pass to this tool
953
+ #
954
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::InputSchema>]
955
+ required :input_schema,
956
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::InputSchema] }
561
957
 
562
- variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0 }
958
+ # @!attribute method_
959
+ # HTTP method to use when calling the API endpoint
960
+ #
961
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::Method]
962
+ required :method_,
963
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::Method },
964
+ api_name: :method
563
965
 
564
- variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember1 }
966
+ # @!attribute name
967
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
968
+ #
969
+ # @return [String]
970
+ required :name, String
565
971
 
566
- class UnionMember0 < Revox::Internal::Type::BaseModel
567
- # @!attribute name
568
- #
569
- # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0::Name]
570
- required :name,
571
- enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0::Name }
972
+ # @!attribute query_params
973
+ # Query string parameters appended to the URL. Values support {{variable}}
974
+ # placeholders
975
+ #
976
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::QueryParam>]
977
+ required :query_params,
978
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::QueryParam] }
572
979
 
573
- # @!attribute type
574
- #
575
- # @return [Symbol, :"dedicated-instance"]
576
- required :type, const: :"dedicated-instance"
980
+ # @!attribute url
981
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
982
+ # values
983
+ #
984
+ # @return [String]
985
+ required :url, String
577
986
 
578
- # @!method initialize(name:, type: :"dedicated-instance")
579
- # @param name [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0::Name]
580
- # @param type [Symbol, :"dedicated-instance"]
987
+ # @!method initialize(body_template:, description:, headers:, input_schema:, method_:, name:, query_params:, url:)
988
+ # Some parameter documentations has been truncated, see
989
+ # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool} for
990
+ # more details.
991
+ #
992
+ # @param body_template [String, nil] JSON body template for the request. Use quoted {{variable}} placeholders (e.g. "
993
+ #
994
+ # @param description [String] Human-readable description of what the tool does, used by the LLM to decide when
995
+ #
996
+ # @param headers [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::Header>] HTTP headers to include in the request. Values support {{variable}} placeholders
997
+ #
998
+ # @param input_schema [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::InputSchema>] Schema defining the parameters the LLM should extract from the conversation to p
999
+ #
1000
+ # @param method_ [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::Method] HTTP method to use when calling the API endpoint
1001
+ #
1002
+ # @param name [String] Unique tool name in lowercase_snake_case (e.g. check_inventory)
1003
+ #
1004
+ # @param query_params [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::QueryParam>] Query string parameters appended to the URL. Values support {{variable}} placeho
1005
+ #
1006
+ # @param url [String] Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic val
581
1007
 
582
- # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0#name
583
- module Name
584
- extend Revox::Internal::Type::Enum
1008
+ class Header < Revox::Internal::Type::BaseModel
1009
+ # @!attribute key
1010
+ #
1011
+ # @return [String]
1012
+ required :key, String
585
1013
 
586
- GPT_4_1 = :"gpt-4.1"
587
- MINISTRAL_3_8B_INSTRUCT = :"ministral-3-8b-instruct"
1014
+ # @!attribute value
1015
+ #
1016
+ # @return [String]
1017
+ required :value, String
588
1018
 
589
- # @!method self.values
590
- # @return [Array<Symbol>]
591
- end
1019
+ # @!method initialize(key:, value:)
1020
+ # @param key [String]
1021
+ # @param value [String]
592
1022
  end
593
1023
 
594
- class UnionMember1 < Revox::Internal::Type::BaseModel
595
- # @!attribute openrouter_model_id
596
- # The model ID to use from OpenRouter. eg: openai/gpt-4.1
1024
+ class InputSchema < Revox::Internal::Type::BaseModel
1025
+ # @!attribute name
597
1026
  #
598
1027
  # @return [String]
599
- required :openrouter_model_id, String
1028
+ required :name, String
600
1029
 
601
- # @!attribute openrouter_provider
602
- # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
1030
+ # @!attribute required
603
1031
  #
604
- # @return [String]
605
- required :openrouter_provider, String
1032
+ # @return [Boolean]
1033
+ required :required, Revox::Internal::Type::Boolean
606
1034
 
607
1035
  # @!attribute type
608
- # Use a model from OpenRouter.
609
1036
  #
610
- # @return [Symbol, :openrouter]
611
- required :type, const: :openrouter
1037
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::InputSchema::Type]
1038
+ required :type,
1039
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::InputSchema::Type }
612
1040
 
613
- # @!method initialize(openrouter_model_id:, openrouter_provider:, type: :openrouter)
614
- # @param openrouter_model_id [String] The model ID to use from OpenRouter. eg: openai/gpt-4.1
1041
+ # @!attribute description
1042
+ #
1043
+ # @return [String, nil]
1044
+ optional :description, String
1045
+
1046
+ # @!attribute enum_options
1047
+ #
1048
+ # @return [Array<String>, nil]
1049
+ optional :enum_options, Revox::Internal::Type::ArrayOf[String]
1050
+
1051
+ # @!method initialize(name:, required:, type:, description: nil, enum_options: nil)
1052
+ # @param name [String]
1053
+ # @param required [Boolean]
1054
+ # @param type [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::InputSchema::Type]
1055
+ # @param description [String]
1056
+ # @param enum_options [Array<String>]
1057
+
1058
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool::InputSchema#type
1059
+ module Type
1060
+ extend Revox::Internal::Type::Enum
1061
+
1062
+ STRING = :string
1063
+ NUMBER = :number
1064
+ BOOLEAN = :boolean
1065
+ ENUM = :enum
1066
+ DATE = :date
1067
+ DATETIME = :datetime
1068
+
1069
+ # @!method self.values
1070
+ # @return [Array<Symbol>]
1071
+ end
1072
+ end
1073
+
1074
+ # HTTP method to use when calling the API endpoint
1075
+ #
1076
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::CustomTool#method_
1077
+ module Method
1078
+ extend Revox::Internal::Type::Enum
1079
+
1080
+ GET = :GET
1081
+ POST = :POST
1082
+ PUT = :PUT
1083
+ PATCH = :PATCH
1084
+ DELETE = :DELETE
1085
+
1086
+ # @!method self.values
1087
+ # @return [Array<Symbol>]
1088
+ end
1089
+
1090
+ class QueryParam < Revox::Internal::Type::BaseModel
1091
+ # @!attribute key
1092
+ #
1093
+ # @return [String]
1094
+ required :key, String
1095
+
1096
+ # @!attribute value
1097
+ #
1098
+ # @return [String]
1099
+ required :value, String
1100
+
1101
+ # @!method initialize(key:, value:)
1102
+ # @param key [String]
1103
+ # @param value [String]
1104
+ end
1105
+ end
1106
+
1107
+ # The language used for the notification email content. One of "en" or "fr".
1108
+ #
1109
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#email_notification_language
1110
+ module EmailNotificationLanguage
1111
+ extend Revox::Internal::Type::Enum
1112
+
1113
+ EN = :en
1114
+ FR = :fr
1115
+
1116
+ # @!method self.values
1117
+ # @return [Array<Symbol>]
1118
+ end
1119
+
1120
+ module EmailNotificationOutcome
1121
+ extend Revox::Internal::Type::Enum
1122
+
1123
+ NOT_INTERESTED = :not_interested
1124
+ INTERESTED = :interested
1125
+ COMPLETED = :completed
1126
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
1127
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1128
+ DO_NOT_CONTACT = :do_not_contact
1129
+ AI_AVERSE = :ai_averse
1130
+ NONE = :none
1131
+
1132
+ # @!method self.values
1133
+ # @return [Array<Symbol>]
1134
+ end
1135
+
1136
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#first_sentence_mode
1137
+ module FirstSentenceMode
1138
+ extend Revox::Internal::Type::Enum
1139
+
1140
+ GENERATED = :generated
1141
+ STATIC = :static
1142
+ NONE = :none
1143
+
1144
+ # @!method self.values
1145
+ # @return [Array<Symbol>]
1146
+ end
1147
+
1148
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1149
+ # not configured.
1150
+ #
1151
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#human_transfer_mode
1152
+ module HumanTransferMode
1153
+ extend Revox::Internal::Type::Enum
1154
+
1155
+ WARM = :warm
1156
+ COLD = :cold
1157
+
1158
+ # @!method self.values
1159
+ # @return [Array<Symbol>]
1160
+ end
1161
+
1162
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#llm_model
1163
+ module LlmModel
1164
+ extend Revox::Internal::Type::Union
1165
+
1166
+ variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0 }
1167
+
1168
+ variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember1 }
1169
+
1170
+ variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember2 }
1171
+
1172
+ variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember3 }
1173
+
1174
+ class UnionMember0 < Revox::Internal::Type::BaseModel
1175
+ # @!attribute name
1176
+ #
1177
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0::Name]
1178
+ required :name,
1179
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0::Name }
1180
+
1181
+ # @!attribute type
1182
+ #
1183
+ # @return [Symbol, :"dedicated-instance"]
1184
+ required :type, const: :"dedicated-instance"
1185
+
1186
+ # @!method initialize(name:, type: :"dedicated-instance")
1187
+ # @param name [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0::Name]
1188
+ # @param type [Symbol, :"dedicated-instance"]
1189
+
1190
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0#name
1191
+ module Name
1192
+ extend Revox::Internal::Type::Enum
1193
+
1194
+ GPT_4_1 = :"gpt-4.1"
1195
+ MINISTRAL_3_8B_INSTRUCT = :"ministral-3-8b-instruct"
1196
+
1197
+ # @!method self.values
1198
+ # @return [Array<Symbol>]
1199
+ end
1200
+ end
1201
+
1202
+ class UnionMember1 < Revox::Internal::Type::BaseModel
1203
+ # @!attribute openrouter_model_id
1204
+ # The model ID to use from OpenRouter. eg: openai/gpt-4.1
1205
+ #
1206
+ # @return [String]
1207
+ required :openrouter_model_id, String
1208
+
1209
+ # @!attribute openrouter_provider
1210
+ # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
1211
+ #
1212
+ # @return [String]
1213
+ required :openrouter_provider, String
1214
+
1215
+ # @!attribute type
1216
+ # Use a model from OpenRouter.
1217
+ #
1218
+ # @return [Symbol, :openrouter]
1219
+ required :type, const: :openrouter
1220
+
1221
+ # @!method initialize(openrouter_model_id:, openrouter_provider:, type: :openrouter)
1222
+ # @param openrouter_model_id [String] The model ID to use from OpenRouter. eg: openai/gpt-4.1
615
1223
  #
616
1224
  # @param openrouter_provider [String] The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
617
1225
  #
618
1226
  # @param type [Symbol, :openrouter] Use a model from OpenRouter.
619
1227
  end
620
1228
 
1229
+ class UnionMember2 < Revox::Internal::Type::BaseModel
1230
+ # @!attribute api_key
1231
+ # API key sent as Bearer token to the custom endpoint.
1232
+ #
1233
+ # @return [String]
1234
+ required :api_key, String
1235
+
1236
+ # @!attribute api_url
1237
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
1238
+ #
1239
+ # @return [String]
1240
+ required :api_url, String
1241
+
1242
+ # @!attribute model_name
1243
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
1244
+ #
1245
+ # @return [String]
1246
+ required :model_name, String
1247
+
1248
+ # @!attribute type
1249
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
1250
+ #
1251
+ # @return [Symbol, :custom]
1252
+ required :type, const: :custom
1253
+
1254
+ # @!method initialize(api_key:, api_url:, model_name:, type: :custom)
1255
+ # @param api_key [String] API key sent as Bearer token to the custom endpoint.
1256
+ #
1257
+ # @param api_url [String] Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
1258
+ #
1259
+ # @param model_name [String] Model name as expected by the provider, e.g. meta-llama/llama-3-70b
1260
+ #
1261
+ # @param type [Symbol, :custom] OpenAI-compatible chat completions API (bring your own endpoint and key).
1262
+ end
1263
+
1264
+ class UnionMember3 < Revox::Internal::Type::BaseModel
1265
+ # @!attribute provider
1266
+ # The provider to use from Realtime. eg: openai, google.
1267
+ #
1268
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember3::Provider]
1269
+ required :provider,
1270
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember3::Provider }
1271
+
1272
+ # @!attribute realtime_model_id
1273
+ # The model ID to use from Realtime. eg: gpt-4.1
1274
+ #
1275
+ # @return [String]
1276
+ required :realtime_model_id, String
1277
+
1278
+ # @!attribute type
1279
+ # Use a model from Realtime.
1280
+ #
1281
+ # @return [Symbol, :realtime]
1282
+ required :type, const: :realtime
1283
+
1284
+ # @!attribute realtime_voice_id
1285
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
1286
+ #
1287
+ # @return [String, nil]
1288
+ optional :realtime_voice_id, String
1289
+
1290
+ # @!method initialize(provider:, realtime_model_id:, realtime_voice_id: nil, type: :realtime)
1291
+ # @param provider [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember3::Provider] The provider to use from Realtime. eg: openai, google.
1292
+ #
1293
+ # @param realtime_model_id [String] The model ID to use from Realtime. eg: gpt-4.1
1294
+ #
1295
+ # @param realtime_voice_id [String] Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
1296
+ #
1297
+ # @param type [Symbol, :realtime] Use a model from Realtime.
1298
+
1299
+ # The provider to use from Realtime. eg: openai, google.
1300
+ #
1301
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember3#provider
1302
+ module Provider
1303
+ extend Revox::Internal::Type::Enum
1304
+
1305
+ OPENAI = :openai
1306
+ GOOGLE = :google
1307
+
1308
+ # @!method self.values
1309
+ # @return [Array<Symbol>]
1310
+ end
1311
+ end
1312
+
621
1313
  # @!method self.variants
622
- # @return [Array(Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember1)]
1314
+ # @return [Array(Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember1, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember2, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::LlmModel::UnionMember3)]
1315
+ end
1316
+
1317
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#position
1318
+ class Position < Revox::Internal::Type::BaseModel
1319
+ # @!attribute x
1320
+ #
1321
+ # @return [Float]
1322
+ required :x, Float
1323
+
1324
+ # @!attribute y_
1325
+ #
1326
+ # @return [Float]
1327
+ required :y_, Float, api_name: :y
1328
+
1329
+ # @!method initialize(x:, y_:)
1330
+ # @param x [Float]
1331
+ # @param y_ [Float]
1332
+ end
1333
+
1334
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#prompt_flow
1335
+ class PromptFlow < Revox::Internal::Type::BaseModel
1336
+ # @!attribute edges
1337
+ #
1338
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Edge>]
1339
+ required :edges,
1340
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Edge] }
1341
+
1342
+ # @!attribute nodes
1343
+ #
1344
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node>]
1345
+ required :nodes,
1346
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node] }
1347
+
1348
+ # @!method initialize(edges:, nodes:)
1349
+ # @param edges [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Edge>]
1350
+ # @param nodes [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node>]
1351
+
1352
+ class Edge < Revox::Internal::Type::BaseModel
1353
+ # @!attribute id
1354
+ #
1355
+ # @return [String]
1356
+ required :id, String
1357
+
1358
+ # @!attribute source
1359
+ #
1360
+ # @return [String]
1361
+ required :source, String
1362
+
1363
+ # @!attribute target
1364
+ #
1365
+ # @return [String]
1366
+ required :target, String
1367
+
1368
+ # @!method initialize(id:, source:, target:)
1369
+ # @param id [String]
1370
+ # @param source [String]
1371
+ # @param target [String]
1372
+ end
1373
+
1374
+ class Node < Revox::Internal::Type::BaseModel
1375
+ # @!attribute id
1376
+ #
1377
+ # @return [String]
1378
+ required :id, String
1379
+
1380
+ # @!attribute data
1381
+ #
1382
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node::Data]
1383
+ required :data,
1384
+ -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node::Data }
1385
+
1386
+ # @!attribute position
1387
+ #
1388
+ # @return [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node::Position]
1389
+ required :position,
1390
+ -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node::Position }
1391
+
1392
+ # @!attribute type
1393
+ #
1394
+ # @return [Symbol, :promptBlock]
1395
+ required :type, const: :promptBlock
1396
+
1397
+ # @!method initialize(id:, data:, position:, type: :promptBlock)
1398
+ # @param id [String]
1399
+ # @param data [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node::Data]
1400
+ # @param position [Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node::Position]
1401
+ # @param type [Symbol, :promptBlock]
1402
+
1403
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node#data
1404
+ class Data < Revox::Internal::Type::BaseModel
1405
+ # @!attribute body
1406
+ #
1407
+ # @return [String]
1408
+ required :body, String
1409
+
1410
+ # @!attribute title
1411
+ #
1412
+ # @return [String]
1413
+ required :title, String
1414
+
1415
+ # @!method initialize(body:, title:)
1416
+ # @param body [String]
1417
+ # @param title [String]
1418
+ end
1419
+
1420
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::PromptFlow::Node#position
1421
+ class Position < Revox::Internal::Type::BaseModel
1422
+ # @!attribute x
1423
+ #
1424
+ # @return [Float]
1425
+ required :x, Float
1426
+
1427
+ # @!attribute y_
1428
+ #
1429
+ # @return [Float]
1430
+ required :y_, Float, api_name: :y
1431
+
1432
+ # @!method initialize(x:, y_:)
1433
+ # @param x [Float]
1434
+ # @param y_ [Float]
1435
+ end
1436
+ end
1437
+ end
1438
+
1439
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#slack
1440
+ class Slack < Revox::Internal::Type::BaseModel
1441
+ # @!attribute channel_id
1442
+ # The Slack channel ID where the notification will be posted.
1443
+ #
1444
+ # @return [String]
1445
+ required :channel_id, String
1446
+
1447
+ # @!attribute connection_id
1448
+ # The Nango connection ID linking the org's Slack workspace to Revox.
1449
+ #
1450
+ # @return [String]
1451
+ required :connection_id, String
1452
+
1453
+ # @!attribute outcomes
1454
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
1455
+ # Use 'none' to notify when outcome is null.
1456
+ #
1457
+ # @return [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack::Outcome>]
1458
+ required :outcomes,
1459
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack::Outcome] }
1460
+
1461
+ # @!attribute channel_name
1462
+ # Human-readable Slack channel name, cached for display in the UI.
1463
+ #
1464
+ # @return [String, nil]
1465
+ optional :channel_name, String, nil?: true
1466
+
1467
+ # @!attribute template
1468
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1469
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
1470
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
1471
+ # prompt_variables and structured_output keys. When null/empty a default template
1472
+ # is used.
1473
+ #
1474
+ # @return [String, nil]
1475
+ optional :template, String, nil?: true
1476
+
1477
+ # @!method initialize(channel_id:, connection_id:, outcomes:, channel_name: nil, template: nil)
1478
+ # Some parameter documentations has been truncated, see
1479
+ # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack} for more
1480
+ # details.
1481
+ #
1482
+ # @param channel_id [String] The Slack channel ID where the notification will be posted.
1483
+ #
1484
+ # @param connection_id [String] The Nango connection ID linking the org's Slack workspace to Revox.
1485
+ #
1486
+ # @param outcomes [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Slack::Outcome>] Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
1487
+ #
1488
+ # @param channel_name [String, nil] Human-readable Slack channel name, cached for display in the UI.
1489
+ #
1490
+ # @param template [String, nil] Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
1491
+ # {{call\_
1492
+
1493
+ module Outcome
1494
+ extend Revox::Internal::Type::Enum
1495
+
1496
+ NOT_INTERESTED = :not_interested
1497
+ INTERESTED = :interested
1498
+ COMPLETED = :completed
1499
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
1500
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1501
+ DO_NOT_CONTACT = :do_not_contact
1502
+ AI_AVERSE = :ai_averse
1503
+ NONE = :none
1504
+
1505
+ # @!method self.values
1506
+ # @return [Array<Symbol>]
1507
+ end
623
1508
  end
624
1509
 
625
1510
  class StructuredOutputConfig < Revox::Internal::Type::BaseModel
@@ -672,6 +1557,88 @@ module Revox
672
1557
  end
673
1558
  end
674
1559
 
1560
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#stt_context
1561
+ class SttContext < Revox::Internal::Type::BaseModel
1562
+ # @!attribute general
1563
+ #
1564
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::SttContext::General>]
1565
+ required :general,
1566
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::SttContext::General] }
1567
+
1568
+ # @!attribute terms
1569
+ #
1570
+ # @return [Array<String>]
1571
+ required :terms, Revox::Internal::Type::ArrayOf[String]
1572
+
1573
+ # @!method initialize(general:, terms:)
1574
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
1575
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
1576
+ # replacing existing entries.
1577
+ #
1578
+ # @param general [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::SttContext::General>]
1579
+ # @param terms [Array<String>]
1580
+
1581
+ class General < Revox::Internal::Type::BaseModel
1582
+ # @!attribute key
1583
+ #
1584
+ # @return [String]
1585
+ required :key, String
1586
+
1587
+ # @!attribute value
1588
+ #
1589
+ # @return [String]
1590
+ required :value, String
1591
+
1592
+ # @!method initialize(key:, value:)
1593
+ # @param key [String]
1594
+ # @param value [String]
1595
+ end
1596
+ end
1597
+
1598
+ # Transcriber (speech-to-text) model used for the assistant.
1599
+ #
1600
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#stt_model
1601
+ module SttModel
1602
+ extend Revox::Internal::Type::Enum
1603
+
1604
+ STT_RT_V4 = :"stt-rt-v4"
1605
+ STT_RT_V5 = :"stt-rt-v5"
1606
+
1607
+ # @!method self.values
1608
+ # @return [Array<Symbol>]
1609
+ end
1610
+
1611
+ # Audio clip to play while the agent is processing a response. One of the built-in
1612
+ # LiveKit audio clips; null disables it.
1613
+ #
1614
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#thinking_sound
1615
+ module ThinkingSound
1616
+ extend Revox::Internal::Type::Enum
1617
+
1618
+ CITY_AMBIENCE_OGG = :"city-ambience.ogg"
1619
+ FOREST_AMBIENCE_OGG = :"forest-ambience.ogg"
1620
+ OFFICE_AMBIENCE_OGG = :"office-ambience.ogg"
1621
+ CROWDED_ROOM_OGG = :"crowded-room.ogg"
1622
+ KEYBOARD_TYPING_OGG = :"keyboard-typing.ogg"
1623
+ KEYBOARD_TYPING2_OGG = :"keyboard-typing2.ogg"
1624
+ HOLD_MUSIC_OGG = :"hold_music.ogg"
1625
+
1626
+ # @!method self.values
1627
+ # @return [Array<Symbol>]
1628
+ end
1629
+
1630
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#type
1631
+ module Type
1632
+ extend Revox::Internal::Type::Enum
1633
+
1634
+ STANDALONE = :standalone
1635
+ MULTI_STEP = :"multi-step"
1636
+ SUB_ASSISTANT = :"sub-assistant"
1637
+
1638
+ # @!method self.values
1639
+ # @return [Array<Symbol>]
1640
+ end
1641
+
675
1642
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#voice
676
1643
  class Voice < Revox::Internal::Type::BaseModel
677
1644
  # @!attribute id
@@ -687,6 +1654,13 @@ module Revox
687
1654
  required :provider,
688
1655
  enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Voice::Provider }
689
1656
 
1657
+ # @!attribute model
1658
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
1659
+ # for other providers.
1660
+ #
1661
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Voice::Model, nil]
1662
+ optional :model, enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Voice::Model }
1663
+
690
1664
  # @!attribute speed
691
1665
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
692
1666
  # 0.7–1.2. Default is 1.0.
@@ -694,7 +1668,14 @@ module Revox
694
1668
  # @return [Float, nil]
695
1669
  optional :speed, Float
696
1670
 
697
- # @!method initialize(id:, provider:, speed: nil)
1671
+ # @!attribute volume
1672
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
1673
+ # providers.
1674
+ #
1675
+ # @return [Float, nil]
1676
+ optional :volume, Float
1677
+
1678
+ # @!method initialize(id:, provider:, model: nil, speed: nil, volume: nil)
698
1679
  # Some parameter documentations has been truncated, see
699
1680
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Voice} for more
700
1681
  # details.
@@ -703,7 +1684,11 @@ module Revox
703
1684
  #
704
1685
  # @param provider [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Voice::Provider] The provider of the voice.
705
1686
  #
1687
+ # @param model [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Voice::Model] Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored fo
1688
+ #
706
1689
  # @param speed [Float] The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
1690
+ #
1691
+ # @param volume [Float] Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other pro
707
1692
 
708
1693
  # The provider of the voice.
709
1694
  #
@@ -717,6 +1702,160 @@ module Revox
717
1702
  # @!method self.values
718
1703
  # @return [Array<Symbol>]
719
1704
  end
1705
+
1706
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
1707
+ # for other providers.
1708
+ #
1709
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Voice#model
1710
+ module Model
1711
+ extend Revox::Internal::Type::Enum
1712
+
1713
+ SONIC_3 = :"sonic-3"
1714
+ SONIC_3_5 = :"sonic-3.5"
1715
+
1716
+ # @!method self.values
1717
+ # @return [Array<Symbol>]
1718
+ end
1719
+ end
1720
+
1721
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#zoho
1722
+ class Zoho < Revox::Internal::Type::BaseModel
1723
+ # @!attribute connection_id
1724
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
1725
+ #
1726
+ # @return [String]
1727
+ required :connection_id, String
1728
+
1729
+ # @!attribute field_mapping
1730
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
1731
+ # field API names on the upserted record.
1732
+ #
1733
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho::FieldMapping>]
1734
+ required :field_mapping,
1735
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho::FieldMapping] }
1736
+
1737
+ # @!attribute log_call_activity
1738
+ # When true, also log the call as a record in Zoho's Calls module (related to the
1739
+ # upserted prospect via Who_Id).
1740
+ #
1741
+ # @return [Boolean]
1742
+ required :log_call_activity, Revox::Internal::Type::Boolean
1743
+
1744
+ # @!attribute module_
1745
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
1746
+ #
1747
+ # @return [String]
1748
+ required :module_, String, api_name: :module
1749
+
1750
+ # @!attribute outcomes
1751
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
1752
+ # 'none' to push when outcome is null.
1753
+ #
1754
+ # @return [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho::Outcome>]
1755
+ required :outcomes,
1756
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho::Outcome] }
1757
+
1758
+ # @!attribute template
1759
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
1760
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
1761
+ # prompt_variables and structured_output keys. When null/empty a default note
1762
+ # (outcome + summary + auto-listed extracted fields) is used.
1763
+ #
1764
+ # @return [String, nil]
1765
+ optional :template, String, nil?: true
1766
+
1767
+ # @!method initialize(connection_id:, field_mapping:, log_call_activity:, module_:, outcomes:, template: nil)
1768
+ # Some parameter documentations has been truncated, see
1769
+ # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho} for more
1770
+ # details.
1771
+ #
1772
+ # @param connection_id [String] The Nango connection ID linking the org's Zoho CRM account to Revox.
1773
+ #
1774
+ # @param field_mapping [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho::FieldMapping>] Maps extracted call fields (structured_output / prompt variables) onto Zoho fiel
1775
+ #
1776
+ # @param log_call_activity [Boolean] When true, also log the call as a record in Zoho's Calls module (related to the
1777
+ #
1778
+ # @param module_ [String] Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
1779
+ #
1780
+ # @param outcomes [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho::Outcome>] Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use 'no
1781
+ #
1782
+ # @param template [String, nil] Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}}, {{cal
1783
+
1784
+ class FieldMapping < Revox::Internal::Type::BaseModel
1785
+ # @!attribute source
1786
+ # Source key to read from the call: a structured_output field name, falling back
1787
+ # to a prompt variable of the same name.
1788
+ #
1789
+ # @return [String]
1790
+ required :source, String
1791
+
1792
+ # @!attribute zoho_field
1793
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
1794
+ # or a custom 'Budget\_\_c').
1795
+ #
1796
+ # @return [String]
1797
+ required :zoho_field, String
1798
+
1799
+ # @!method initialize(source:, zoho_field:)
1800
+ # Some parameter documentations has been truncated, see
1801
+ # {Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant::Zoho::FieldMapping}
1802
+ # for more details.
1803
+ #
1804
+ # @param source [String] Source key to read from the call: a structured_output field name, falling back t
1805
+ #
1806
+ # @param zoho_field [String] Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
1807
+ end
1808
+
1809
+ module Outcome
1810
+ extend Revox::Internal::Type::Enum
1811
+
1812
+ NOT_INTERESTED = :not_interested
1813
+ INTERESTED = :interested
1814
+ COMPLETED = :completed
1815
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
1816
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
1817
+ DO_NOT_CONTACT = :do_not_contact
1818
+ AI_AVERSE = :ai_averse
1819
+ NONE = :none
1820
+
1821
+ # @!method self.values
1822
+ # @return [Array<Symbol>]
1823
+ end
1824
+ end
1825
+
1826
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::Assistant#created_by
1827
+ class CreatedBy < Revox::Internal::Type::BaseModel
1828
+ # @!attribute id
1829
+ # The database user id of the creator.
1830
+ #
1831
+ # @return [String]
1832
+ required :id, String
1833
+
1834
+ # @!attribute email
1835
+ #
1836
+ # @return [String]
1837
+ required :email, String
1838
+
1839
+ # @!attribute first_name
1840
+ #
1841
+ # @return [String, nil]
1842
+ required :first_name, String, nil?: true
1843
+
1844
+ # @!attribute last_name
1845
+ #
1846
+ # @return [String, nil]
1847
+ required :last_name, String, nil?: true
1848
+
1849
+ # @!method initialize(id:, email:, first_name:, last_name:)
1850
+ # The user who created the assistant.
1851
+ #
1852
+ # @param id [String] The database user id of the creator.
1853
+ #
1854
+ # @param email [String]
1855
+ #
1856
+ # @param first_name [String, nil]
1857
+ #
1858
+ # @param last_name [String, nil]
720
1859
  end
721
1860
 
722
1861
  class FaqItem < Revox::Internal::Type::BaseModel
@@ -825,12 +1964,20 @@ module Revox
825
1964
  # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Status]
826
1965
  required :status, enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Status }
827
1966
 
1967
+ # @!attribute assistants_used
1968
+ # Assistant node ids entered during this attempt, in traversal order.
1969
+ #
1970
+ # @return [Array<String>, nil]
1971
+ optional :assistants_used, Revox::Internal::Type::ArrayOf[String], nil?: true
1972
+
828
1973
  # @!attribute end_reason
829
1974
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
830
1975
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
831
1976
  #
832
- # @return [String, nil]
833
- optional :end_reason, String, nil?: true
1977
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EndReason, nil]
1978
+ optional :end_reason,
1979
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EndReason },
1980
+ nil?: true
834
1981
 
835
1982
  # @!attribute ended_by
836
1983
  # Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or
@@ -841,6 +1988,25 @@ module Revox
841
1988
  enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EndedBy },
842
1989
  nil?: true
843
1990
 
1991
+ # @!attribute post_call_transcript
1992
+ # Higher-quality transcript generated after the call via Soniox async STT. Null
1993
+ # until generated or when no recording is available.
1994
+ #
1995
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript>, nil]
1996
+ optional :post_call_transcript,
1997
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript] },
1998
+ nil?: true
1999
+
2000
+ # @!attribute sms_log
2001
+ # Automatic SMS sent after the call (voicemail and after-call), ordered oldest
2002
+ # first. The in-call `send_sms` is excluded — it already appears in the transcript
2003
+ # as a tool call.
2004
+ #
2005
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog>, nil]
2006
+ optional :sms_log,
2007
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog] },
2008
+ nil?: true
2009
+
844
2010
  # @!attribute structured_output
845
2011
  # The data extracted from the call, using the structured output config from the
846
2012
  # parent call object.
@@ -851,14 +2017,14 @@ module Revox
851
2017
  nil?: true
852
2018
 
853
2019
  # @!attribute transcript
854
- # The transcript of the call.
2020
+ # The live transcript of the call, built in real time.
855
2021
  #
856
2022
  # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Transcript>, nil]
857
2023
  optional :transcript,
858
2024
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Transcript] },
859
2025
  nil?: true
860
2026
 
861
- # @!method initialize(id:, answered_at:, dial_error:, ended_at:, phone_number:, recording_url:, result:, started_at:, status:, end_reason: nil, ended_by: nil, structured_output: nil, transcript: nil)
2027
+ # @!method initialize(id:, answered_at:, dial_error:, ended_at:, phone_number:, recording_url:, result:, started_at:, status:, assistants_used: nil, end_reason: nil, ended_by: nil, post_call_transcript: nil, sms_log: nil, structured_output: nil, transcript: nil)
862
2028
  # Some parameter documentations has been truncated, see
863
2029
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt} for more
864
2030
  # details.
@@ -884,13 +2050,19 @@ module Revox
884
2050
  #
885
2051
  # @param status [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Status] The status of the call attempt.
886
2052
  #
887
- # @param end_reason [String, nil] Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voic
2053
+ # @param assistants_used [Array<String>, nil] Assistant node ids entered during this attempt, in traversal order.
2054
+ #
2055
+ # @param end_reason [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EndReason, nil] Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voic
888
2056
  #
889
2057
  # @param ended_by [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::EndedBy, nil] Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or 'syst
890
2058
  #
2059
+ # @param post_call_transcript [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript>, nil] Higher-quality transcript generated after the call via Soniox async STT. Null un
2060
+ #
2061
+ # @param sms_log [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog>, nil] Automatic SMS sent after the call (voicemail and after-call), ordered oldest fir
2062
+ #
891
2063
  # @param structured_output [Hash{Symbol=>Object}, nil] The data extracted from the call, using the structured output config from the pa
892
2064
  #
893
- # @param transcript [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Transcript>, nil] The transcript of the call.
2065
+ # @param transcript [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Transcript>, nil] The live transcript of the call, built in real time.
894
2066
 
895
2067
  # The SIP error that occurred.
896
2068
  #
@@ -915,45 +2087,201 @@ module Revox
915
2087
  module Result
916
2088
  extend Revox::Internal::Type::Enum
917
2089
 
918
- IVR = :IVR
919
- VOICEMAIL = :voicemail
920
- HUMAN = :human
921
- UNKNOWN = :unknown
922
- IOS_SCREENING_FILTER = :"ios-screening-filter"
2090
+ IVR = :IVR
2091
+ VOICEMAIL = :voicemail
2092
+ HUMAN = :human
2093
+ UNKNOWN = :unknown
2094
+ IOS_SCREENING_FILTER = :"ios-screening-filter"
2095
+
2096
+ # @!method self.values
2097
+ # @return [Array<Symbol>]
2098
+ end
2099
+
2100
+ # The status of the call attempt.
2101
+ #
2102
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt#status
2103
+ module Status
2104
+ extend Revox::Internal::Type::Enum
2105
+
2106
+ QUEUED = :queued
2107
+ RINGING = :ringing
2108
+ ONGOING = :ongoing
2109
+ COMPLETED = :completed
2110
+ ERROR = :error
2111
+
2112
+ # @!method self.values
2113
+ # @return [Array<Symbol>]
2114
+ end
2115
+
2116
+ # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
2117
+ # 'voicemail', 'transfer', 'ivr_no_navigate'.
2118
+ #
2119
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt#end_reason
2120
+ module EndReason
2121
+ extend Revox::Internal::Type::Enum
2122
+
2123
+ CLIENT_INITIATED = :client_initiated
2124
+ CONNECTION_TIMEOUT = :connection_timeout
2125
+ HUMAN_TAKEOVER = :human_takeover
2126
+ IVR_NO_NAVIGATE = :ivr_no_navigate
2127
+ MAX_DURATION = :max_duration
2128
+ PARTICIPANT_REMOVED = :participant_removed
2129
+ TOOL_END_CALL = :tool_end_call
2130
+ TRANSFER = :transfer
2131
+ USER_INACTIVE = :user_inactive
2132
+ USER_REJECTED = :user_rejected
2133
+ USER_UNAVAILABLE = :user_unavailable
2134
+ VOICEMAIL = :voicemail
2135
+ SPEED_DIAL_ABANDONED = :speed_dial_abandoned
2136
+ SPEED_DIAL_OPERATOR_MISSED = :speed_dial_operator_missed
2137
+ SPEED_DIAL_TIMEOUT = :speed_dial_timeout
2138
+ SPEED_DIAL_HANGUP = :speed_dial_hangup
2139
+
2140
+ # @!method self.values
2141
+ # @return [Array<Symbol>]
2142
+ end
2143
+
2144
+ # Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or
2145
+ # 'system' (e.g. max duration limit).
2146
+ #
2147
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt#ended_by
2148
+ module EndedBy
2149
+ extend Revox::Internal::Type::Enum
2150
+
2151
+ AGENT = :agent
2152
+ USER = :user
2153
+ SYSTEM = :system
2154
+
2155
+ # @!method self.values
2156
+ # @return [Array<Symbol>]
2157
+ end
2158
+
2159
+ class PostCallTranscript < Revox::Internal::Type::BaseModel
2160
+ # @!attribute content
2161
+ #
2162
+ # @return [String]
2163
+ required :content, String
2164
+
2165
+ # @!attribute role
2166
+ #
2167
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript::Role]
2168
+ required :role,
2169
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript::Role }
2170
+
2171
+ # @!attribute tool_arguments
2172
+ #
2173
+ # @return [Hash{Symbol=>Object}, String, nil]
2174
+ optional :tool_arguments,
2175
+ union: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript::ToolArguments }
2176
+
2177
+ # @!attribute tool_is_error
2178
+ #
2179
+ # @return [Boolean, nil]
2180
+ optional :tool_is_error, Revox::Internal::Type::Boolean
2181
+
2182
+ # @!attribute tool_name
2183
+ #
2184
+ # @return [String, nil]
2185
+ optional :tool_name, String
2186
+
2187
+ # @!attribute tool_output
2188
+ #
2189
+ # @return [String, nil]
2190
+ optional :tool_output, String
2191
+
2192
+ # @!method initialize(content:, role:, tool_arguments: nil, tool_is_error: nil, tool_name: nil, tool_output: nil)
2193
+ # @param content [String]
2194
+ # @param role [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript::Role]
2195
+ # @param tool_arguments [Hash{Symbol=>Object}, String]
2196
+ # @param tool_is_error [Boolean]
2197
+ # @param tool_name [String]
2198
+ # @param tool_output [String]
2199
+
2200
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript#role
2201
+ module Role
2202
+ extend Revox::Internal::Type::Enum
2203
+
2204
+ USER = :user
2205
+ ASSISTANT = :assistant
2206
+ HUMAN_AGENT = :human_agent
2207
+ TOOL = :tool
2208
+
2209
+ # @!method self.values
2210
+ # @return [Array<Symbol>]
2211
+ end
2212
+
2213
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript#tool_arguments
2214
+ module ToolArguments
2215
+ extend Revox::Internal::Type::Union
2216
+
2217
+ variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::PostCallTranscript::ToolArguments::UnionMember0Map }
2218
+
2219
+ variant String
2220
+
2221
+ # @!method self.variants
2222
+ # @return [Array(Hash{Symbol=>Object}, String)]
2223
+
2224
+ # @type [Revox::Internal::Type::Converter]
2225
+ UnionMember0Map = Revox::Internal::Type::HashOf[Revox::Internal::Type::Unknown]
2226
+ end
2227
+ end
2228
+
2229
+ class SMSLog < Revox::Internal::Type::BaseModel
2230
+ # @!attribute id
2231
+ #
2232
+ # @return [String]
2233
+ required :id, String
2234
+
2235
+ # @!attribute created_at
2236
+ # When the SMS was sent.
2237
+ #
2238
+ # @return [Object]
2239
+ required :created_at, Revox::Internal::Type::Unknown
2240
+
2241
+ # @!attribute message_body
2242
+ #
2243
+ # @return [String]
2244
+ required :message_body, String
923
2245
 
924
- # @!method self.values
925
- # @return [Array<Symbol>]
926
- end
2246
+ # @!attribute to_phone_number
2247
+ #
2248
+ # @return [String]
2249
+ required :to_phone_number, String
927
2250
 
928
- # The status of the call attempt.
929
- #
930
- # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt#status
931
- module Status
932
- extend Revox::Internal::Type::Enum
2251
+ # @!attribute twilio_message_sid
2252
+ #
2253
+ # @return [String, nil]
2254
+ required :twilio_message_sid, String, nil?: true
933
2255
 
934
- QUEUED = :queued
935
- RINGING = :ringing
936
- ONGOING = :ongoing
937
- COMPLETED = :completed
938
- ERROR = :error
2256
+ # @!attribute type
2257
+ #
2258
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog::Type]
2259
+ required :type, enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog::Type }
939
2260
 
940
- # @!method self.values
941
- # @return [Array<Symbol>]
942
- end
2261
+ # @!method initialize(id:, created_at:, message_body:, to_phone_number:, twilio_message_sid:, type:)
2262
+ # @param id [String]
2263
+ #
2264
+ # @param created_at [Object] When the SMS was sent.
2265
+ #
2266
+ # @param message_body [String]
2267
+ #
2268
+ # @param to_phone_number [String]
2269
+ #
2270
+ # @param twilio_message_sid [String, nil]
2271
+ #
2272
+ # @param type [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog::Type]
943
2273
 
944
- # Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or
945
- # 'system' (e.g. max duration limit).
946
- #
947
- # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt#ended_by
948
- module EndedBy
949
- extend Revox::Internal::Type::Enum
2274
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::SMSLog#type
2275
+ module Type
2276
+ extend Revox::Internal::Type::Enum
950
2277
 
951
- AGENT = :agent
952
- USER = :user
953
- SYSTEM = :system
2278
+ IN_CALL = :in_call
2279
+ VOICEMAIL = :voicemail
2280
+ AFTER_CALL = :after_call
954
2281
 
955
- # @!method self.values
956
- # @return [Array<Symbol>]
2282
+ # @!method self.values
2283
+ # @return [Array<Symbol>]
2284
+ end
957
2285
  end
958
2286
 
959
2287
  class Transcript < Revox::Internal::Type::BaseModel
@@ -984,12 +2312,18 @@ module Revox
984
2312
  # @return [String, nil]
985
2313
  optional :tool_name, String
986
2314
 
987
- # @!method initialize(content:, role:, tool_arguments: nil, tool_is_error: nil, tool_name: nil)
2315
+ # @!attribute tool_output
2316
+ #
2317
+ # @return [String, nil]
2318
+ optional :tool_output, String
2319
+
2320
+ # @!method initialize(content:, role:, tool_arguments: nil, tool_is_error: nil, tool_name: nil, tool_output: nil)
988
2321
  # @param content [String]
989
2322
  # @param role [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Transcript::Role]
990
2323
  # @param tool_arguments [Hash{Symbol=>Object}, String]
991
2324
  # @param tool_is_error [Boolean]
992
2325
  # @param tool_name [String]
2326
+ # @param tool_output [String]
993
2327
 
994
2328
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::CallAttempt::Transcript#role
995
2329
  module Role
@@ -997,6 +2331,7 @@ module Revox
997
2331
 
998
2332
  USER = :user
999
2333
  ASSISTANT = :assistant
2334
+ HUMAN_AGENT = :human_agent
1000
2335
  TOOL = :tool
1001
2336
 
1002
2337
  # @!method self.values
@@ -1022,6 +2357,23 @@ module Revox
1022
2357
 
1023
2358
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call#call_retry_config
1024
2359
  class CallRetryConfig < Revox::Internal::Type::BaseModel
2360
+ # @!attribute allowed_days
2361
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
2362
+ # Monday through Friday.
2363
+ #
2364
+ # @return [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallRetryConfig::AllowedDay>]
2365
+ required :allowed_days,
2366
+ -> { Revox::Internal::Type::ArrayOf[enum: Revox::Models::CampaignGetRowsResponse::Row::Call::CallRetryConfig::AllowedDay] }
2367
+
2368
+ # @!attribute call_twice_in_a_row
2369
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
2370
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
2371
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
2372
+ # Default: false.
2373
+ #
2374
+ # @return [Boolean]
2375
+ required :call_twice_in_a_row, Revox::Internal::Type::Boolean
2376
+
1025
2377
  # @!attribute calling_windows
1026
2378
  #
1027
2379
  # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallRetryConfig::CallingWindow>]
@@ -1042,7 +2394,7 @@ module Revox
1042
2394
  # @return [String, nil]
1043
2395
  optional :timezone, String, nil?: true
1044
2396
 
1045
- # @!method initialize(calling_windows:, max_retry_attempts:, timezone: nil)
2397
+ # @!method initialize(allowed_days:, call_twice_in_a_row:, calling_windows:, max_retry_attempts:, timezone: nil)
1046
2398
  # Some parameter documentations has been truncated, see
1047
2399
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::CallRetryConfig} for more
1048
2400
  # details.
@@ -1050,12 +2402,31 @@ module Revox
1050
2402
  # Configuration for call retry behavior including time windows, delays, and max
1051
2403
  # iterations. If not provided, defaults will be used.
1052
2404
  #
2405
+ # @param allowed_days [Array<Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::CallRetryConfig::AllowedDay>] Days of the week when calls are allowed, in the recipient's timezone. Default: M
2406
+ #
2407
+ # @param call_twice_in_a_row [Boolean] If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping retr
2408
+ #
1053
2409
  # @param calling_windows [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::CallRetryConfig::CallingWindow>]
1054
2410
  #
1055
2411
  # @param max_retry_attempts [Integer] Maximum number of call retry attempts. Default: 3.
1056
2412
  #
1057
2413
  # @param timezone [String, nil] Optional IANA timezone identifier to override the automatic timezone detection f
1058
2414
 
2415
+ module AllowedDay
2416
+ extend Revox::Internal::Type::Enum
2417
+
2418
+ MONDAY = :monday
2419
+ TUESDAY = :tuesday
2420
+ WEDNESDAY = :wednesday
2421
+ THURSDAY = :thursday
2422
+ FRIDAY = :friday
2423
+ SATURDAY = :saturday
2424
+ SUNDAY = :sunday
2425
+
2426
+ # @!method self.values
2427
+ # @return [Array<Symbol>]
2428
+ end
2429
+
1059
2430
  class CallingWindow < Revox::Internal::Type::BaseModel
1060
2431
  # @!attribute calling_window_end_time
1061
2432
  # End time for the calling window in the recipient's timezone (or
@@ -1109,6 +2480,38 @@ module Revox
1109
2480
  # @param name [String]
1110
2481
  end
1111
2482
 
2483
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call#contact
2484
+ class Contact < Revox::Internal::Type::BaseModel
2485
+ # @!attribute company
2486
+ #
2487
+ # @return [String, nil]
2488
+ required :company, String, nil?: true
2489
+
2490
+ # @!attribute email
2491
+ #
2492
+ # @return [String, nil]
2493
+ required :email, String, nil?: true
2494
+
2495
+ # @!attribute first_name
2496
+ #
2497
+ # @return [String, nil]
2498
+ required :first_name, String, nil?: true
2499
+
2500
+ # @!attribute last_name
2501
+ #
2502
+ # @return [String, nil]
2503
+ required :last_name, String, nil?: true
2504
+
2505
+ # @!method initialize(company:, email:, first_name:, last_name:)
2506
+ # Magic contact variables (prospect identity) extracted from the call's input data
2507
+ # and transcript.
2508
+ #
2509
+ # @param company [String, nil]
2510
+ # @param email [String, nil]
2511
+ # @param first_name [String, nil]
2512
+ # @param last_name [String, nil]
2513
+ end
2514
+
1112
2515
  # Whether the call is inbound or outbound.
1113
2516
  #
1114
2517
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call#direction
@@ -1182,12 +2585,20 @@ module Revox
1182
2585
  # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Status]
1183
2586
  required :status, enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Status }
1184
2587
 
2588
+ # @!attribute assistants_used
2589
+ # Assistant node ids entered during this attempt, in traversal order.
2590
+ #
2591
+ # @return [Array<String>, nil]
2592
+ optional :assistants_used, Revox::Internal::Type::ArrayOf[String], nil?: true
2593
+
1185
2594
  # @!attribute end_reason
1186
2595
  # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
1187
2596
  # 'voicemail', 'transfer', 'ivr_no_navigate'.
1188
2597
  #
1189
- # @return [String, nil]
1190
- optional :end_reason, String, nil?: true
2598
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EndReason, nil]
2599
+ optional :end_reason,
2600
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EndReason },
2601
+ nil?: true
1191
2602
 
1192
2603
  # @!attribute ended_by
1193
2604
  # Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or
@@ -1198,6 +2609,25 @@ module Revox
1198
2609
  enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EndedBy },
1199
2610
  nil?: true
1200
2611
 
2612
+ # @!attribute post_call_transcript
2613
+ # Higher-quality transcript generated after the call via Soniox async STT. Null
2614
+ # until generated or when no recording is available.
2615
+ #
2616
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript>, nil]
2617
+ optional :post_call_transcript,
2618
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript] },
2619
+ nil?: true
2620
+
2621
+ # @!attribute sms_log
2622
+ # Automatic SMS sent after the call (voicemail and after-call), ordered oldest
2623
+ # first. The in-call `send_sms` is excluded — it already appears in the transcript
2624
+ # as a tool call.
2625
+ #
2626
+ # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog>, nil]
2627
+ optional :sms_log,
2628
+ -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog] },
2629
+ nil?: true
2630
+
1201
2631
  # @!attribute structured_output
1202
2632
  # The data extracted from the call, using the structured output config from the
1203
2633
  # parent call object.
@@ -1208,14 +2638,14 @@ module Revox
1208
2638
  nil?: true
1209
2639
 
1210
2640
  # @!attribute transcript
1211
- # The transcript of the call.
2641
+ # The live transcript of the call, built in real time.
1212
2642
  #
1213
2643
  # @return [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Transcript>, nil]
1214
2644
  optional :transcript,
1215
2645
  -> { Revox::Internal::Type::ArrayOf[Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Transcript] },
1216
2646
  nil?: true
1217
2647
 
1218
- # @!method initialize(id:, answered_at:, dial_error:, ended_at:, phone_number:, recording_url:, result:, started_at:, status:, end_reason: nil, ended_by: nil, structured_output: nil, transcript: nil)
2648
+ # @!method initialize(id:, answered_at:, dial_error:, ended_at:, phone_number:, recording_url:, result:, started_at:, status:, assistants_used: nil, end_reason: nil, ended_by: nil, post_call_transcript: nil, sms_log: nil, structured_output: nil, transcript: nil)
1219
2649
  # Some parameter documentations has been truncated, see
1220
2650
  # {Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt} for more
1221
2651
  # details.
@@ -1241,13 +2671,19 @@ module Revox
1241
2671
  #
1242
2672
  # @param status [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Status] The status of the call attempt.
1243
2673
  #
1244
- # @param end_reason [String, nil] Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voic
2674
+ # @param assistants_used [Array<String>, nil] Assistant node ids entered during this attempt, in traversal order.
2675
+ #
2676
+ # @param end_reason [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EndReason, nil] Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voic
1245
2677
  #
1246
2678
  # @param ended_by [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::EndedBy, nil] Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or 'syst
1247
2679
  #
2680
+ # @param post_call_transcript [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript>, nil] Higher-quality transcript generated after the call via Soniox async STT. Null un
2681
+ #
2682
+ # @param sms_log [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog>, nil] Automatic SMS sent after the call (voicemail and after-call), ordered oldest fir
2683
+ #
1248
2684
  # @param structured_output [Hash{Symbol=>Object}, nil] The data extracted from the call, using the structured output config from the pa
1249
2685
  #
1250
- # @param transcript [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Transcript>, nil] The transcript of the call.
2686
+ # @param transcript [Array<Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Transcript>, nil] The live transcript of the call, built in real time.
1251
2687
 
1252
2688
  # The SIP error that occurred.
1253
2689
  #
@@ -1298,6 +2734,34 @@ module Revox
1298
2734
  # @return [Array<Symbol>]
1299
2735
  end
1300
2736
 
2737
+ # Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call',
2738
+ # 'voicemail', 'transfer', 'ivr_no_navigate'.
2739
+ #
2740
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt#end_reason
2741
+ module EndReason
2742
+ extend Revox::Internal::Type::Enum
2743
+
2744
+ CLIENT_INITIATED = :client_initiated
2745
+ CONNECTION_TIMEOUT = :connection_timeout
2746
+ HUMAN_TAKEOVER = :human_takeover
2747
+ IVR_NO_NAVIGATE = :ivr_no_navigate
2748
+ MAX_DURATION = :max_duration
2749
+ PARTICIPANT_REMOVED = :participant_removed
2750
+ TOOL_END_CALL = :tool_end_call
2751
+ TRANSFER = :transfer
2752
+ USER_INACTIVE = :user_inactive
2753
+ USER_REJECTED = :user_rejected
2754
+ USER_UNAVAILABLE = :user_unavailable
2755
+ VOICEMAIL = :voicemail
2756
+ SPEED_DIAL_ABANDONED = :speed_dial_abandoned
2757
+ SPEED_DIAL_OPERATOR_MISSED = :speed_dial_operator_missed
2758
+ SPEED_DIAL_TIMEOUT = :speed_dial_timeout
2759
+ SPEED_DIAL_HANGUP = :speed_dial_hangup
2760
+
2761
+ # @!method self.values
2762
+ # @return [Array<Symbol>]
2763
+ end
2764
+
1301
2765
  # Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or
1302
2766
  # 'system' (e.g. max duration limit).
1303
2767
  #
@@ -1313,6 +2777,135 @@ module Revox
1313
2777
  # @return [Array<Symbol>]
1314
2778
  end
1315
2779
 
2780
+ class PostCallTranscript < Revox::Internal::Type::BaseModel
2781
+ # @!attribute content
2782
+ #
2783
+ # @return [String]
2784
+ required :content, String
2785
+
2786
+ # @!attribute role
2787
+ #
2788
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript::Role]
2789
+ required :role,
2790
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript::Role }
2791
+
2792
+ # @!attribute tool_arguments
2793
+ #
2794
+ # @return [Hash{Symbol=>Object}, String, nil]
2795
+ optional :tool_arguments,
2796
+ union: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript::ToolArguments }
2797
+
2798
+ # @!attribute tool_is_error
2799
+ #
2800
+ # @return [Boolean, nil]
2801
+ optional :tool_is_error, Revox::Internal::Type::Boolean
2802
+
2803
+ # @!attribute tool_name
2804
+ #
2805
+ # @return [String, nil]
2806
+ optional :tool_name, String
2807
+
2808
+ # @!attribute tool_output
2809
+ #
2810
+ # @return [String, nil]
2811
+ optional :tool_output, String
2812
+
2813
+ # @!method initialize(content:, role:, tool_arguments: nil, tool_is_error: nil, tool_name: nil, tool_output: nil)
2814
+ # @param content [String]
2815
+ # @param role [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript::Role]
2816
+ # @param tool_arguments [Hash{Symbol=>Object}, String]
2817
+ # @param tool_is_error [Boolean]
2818
+ # @param tool_name [String]
2819
+ # @param tool_output [String]
2820
+
2821
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript#role
2822
+ module Role
2823
+ extend Revox::Internal::Type::Enum
2824
+
2825
+ USER = :user
2826
+ ASSISTANT = :assistant
2827
+ HUMAN_AGENT = :human_agent
2828
+ TOOL = :tool
2829
+
2830
+ # @!method self.values
2831
+ # @return [Array<Symbol>]
2832
+ end
2833
+
2834
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript#tool_arguments
2835
+ module ToolArguments
2836
+ extend Revox::Internal::Type::Union
2837
+
2838
+ variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::PostCallTranscript::ToolArguments::UnionMember0Map }
2839
+
2840
+ variant String
2841
+
2842
+ # @!method self.variants
2843
+ # @return [Array(Hash{Symbol=>Object}, String)]
2844
+
2845
+ # @type [Revox::Internal::Type::Converter]
2846
+ UnionMember0Map = Revox::Internal::Type::HashOf[Revox::Internal::Type::Unknown]
2847
+ end
2848
+ end
2849
+
2850
+ class SMSLog < Revox::Internal::Type::BaseModel
2851
+ # @!attribute id
2852
+ #
2853
+ # @return [String]
2854
+ required :id, String
2855
+
2856
+ # @!attribute created_at
2857
+ # When the SMS was sent.
2858
+ #
2859
+ # @return [Object]
2860
+ required :created_at, Revox::Internal::Type::Unknown
2861
+
2862
+ # @!attribute message_body
2863
+ #
2864
+ # @return [String]
2865
+ required :message_body, String
2866
+
2867
+ # @!attribute to_phone_number
2868
+ #
2869
+ # @return [String]
2870
+ required :to_phone_number, String
2871
+
2872
+ # @!attribute twilio_message_sid
2873
+ #
2874
+ # @return [String, nil]
2875
+ required :twilio_message_sid, String, nil?: true
2876
+
2877
+ # @!attribute type
2878
+ #
2879
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog::Type]
2880
+ required :type,
2881
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog::Type }
2882
+
2883
+ # @!method initialize(id:, created_at:, message_body:, to_phone_number:, twilio_message_sid:, type:)
2884
+ # @param id [String]
2885
+ #
2886
+ # @param created_at [Object] When the SMS was sent.
2887
+ #
2888
+ # @param message_body [String]
2889
+ #
2890
+ # @param to_phone_number [String]
2891
+ #
2892
+ # @param twilio_message_sid [String, nil]
2893
+ #
2894
+ # @param type [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog::Type]
2895
+
2896
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::SMSLog#type
2897
+ module Type
2898
+ extend Revox::Internal::Type::Enum
2899
+
2900
+ IN_CALL = :in_call
2901
+ VOICEMAIL = :voicemail
2902
+ AFTER_CALL = :after_call
2903
+
2904
+ # @!method self.values
2905
+ # @return [Array<Symbol>]
2906
+ end
2907
+ end
2908
+
1316
2909
  class Transcript < Revox::Internal::Type::BaseModel
1317
2910
  # @!attribute content
1318
2911
  #
@@ -1341,12 +2934,18 @@ module Revox
1341
2934
  # @return [String, nil]
1342
2935
  optional :tool_name, String
1343
2936
 
1344
- # @!method initialize(content:, role:, tool_arguments: nil, tool_is_error: nil, tool_name: nil)
2937
+ # @!attribute tool_output
2938
+ #
2939
+ # @return [String, nil]
2940
+ optional :tool_output, String
2941
+
2942
+ # @!method initialize(content:, role:, tool_arguments: nil, tool_is_error: nil, tool_name: nil, tool_output: nil)
1345
2943
  # @param content [String]
1346
2944
  # @param role [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Transcript::Role]
1347
2945
  # @param tool_arguments [Hash{Symbol=>Object}, String]
1348
2946
  # @param tool_is_error [Boolean]
1349
2947
  # @param tool_name [String]
2948
+ # @param tool_output [String]
1350
2949
 
1351
2950
  # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LastCallAttempt::Transcript#role
1352
2951
  module Role
@@ -1354,6 +2953,7 @@ module Revox
1354
2953
 
1355
2954
  USER = :user
1356
2955
  ASSISTANT = :assistant
2956
+ HUMAN_AGENT = :human_agent
1357
2957
  TOOL = :tool
1358
2958
 
1359
2959
  # @!method self.values
@@ -1385,6 +2985,10 @@ module Revox
1385
2985
 
1386
2986
  variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember1 }
1387
2987
 
2988
+ variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember2 }
2989
+
2990
+ variant -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember3 }
2991
+
1388
2992
  class UnionMember0 < Revox::Internal::Type::BaseModel
1389
2993
  # @!attribute name
1390
2994
  #
@@ -1440,8 +3044,92 @@ module Revox
1440
3044
  # @param type [Symbol, :openrouter] Use a model from OpenRouter.
1441
3045
  end
1442
3046
 
3047
+ class UnionMember2 < Revox::Internal::Type::BaseModel
3048
+ # @!attribute api_key
3049
+ # API key sent as Bearer token to the custom endpoint.
3050
+ #
3051
+ # @return [String]
3052
+ required :api_key, String
3053
+
3054
+ # @!attribute api_url
3055
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
3056
+ #
3057
+ # @return [String]
3058
+ required :api_url, String
3059
+
3060
+ # @!attribute model_name
3061
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
3062
+ #
3063
+ # @return [String]
3064
+ required :model_name, String
3065
+
3066
+ # @!attribute type
3067
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
3068
+ #
3069
+ # @return [Symbol, :custom]
3070
+ required :type, const: :custom
3071
+
3072
+ # @!method initialize(api_key:, api_url:, model_name:, type: :custom)
3073
+ # @param api_key [String] API key sent as Bearer token to the custom endpoint.
3074
+ #
3075
+ # @param api_url [String] Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
3076
+ #
3077
+ # @param model_name [String] Model name as expected by the provider, e.g. meta-llama/llama-3-70b
3078
+ #
3079
+ # @param type [Symbol, :custom] OpenAI-compatible chat completions API (bring your own endpoint and key).
3080
+ end
3081
+
3082
+ class UnionMember3 < Revox::Internal::Type::BaseModel
3083
+ # @!attribute provider
3084
+ # The provider to use from Realtime. eg: openai, google.
3085
+ #
3086
+ # @return [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember3::Provider]
3087
+ required :provider,
3088
+ enum: -> { Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember3::Provider }
3089
+
3090
+ # @!attribute realtime_model_id
3091
+ # The model ID to use from Realtime. eg: gpt-4.1
3092
+ #
3093
+ # @return [String]
3094
+ required :realtime_model_id, String
3095
+
3096
+ # @!attribute type
3097
+ # Use a model from Realtime.
3098
+ #
3099
+ # @return [Symbol, :realtime]
3100
+ required :type, const: :realtime
3101
+
3102
+ # @!attribute realtime_voice_id
3103
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
3104
+ #
3105
+ # @return [String, nil]
3106
+ optional :realtime_voice_id, String
3107
+
3108
+ # @!method initialize(provider:, realtime_model_id:, realtime_voice_id: nil, type: :realtime)
3109
+ # @param provider [Symbol, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember3::Provider] The provider to use from Realtime. eg: openai, google.
3110
+ #
3111
+ # @param realtime_model_id [String] The model ID to use from Realtime. eg: gpt-4.1
3112
+ #
3113
+ # @param realtime_voice_id [String] Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
3114
+ #
3115
+ # @param type [Symbol, :realtime] Use a model from Realtime.
3116
+
3117
+ # The provider to use from Realtime. eg: openai, google.
3118
+ #
3119
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember3#provider
3120
+ module Provider
3121
+ extend Revox::Internal::Type::Enum
3122
+
3123
+ OPENAI = :openai
3124
+ GOOGLE = :google
3125
+
3126
+ # @!method self.values
3127
+ # @return [Array<Symbol>]
3128
+ end
3129
+ end
3130
+
1443
3131
  # @!method self.variants
1444
- # @return [Array(Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember1)]
3132
+ # @return [Array(Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember0, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember1, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember2, Revox::Models::CampaignGetRowsResponse::Row::Call::LlmModel::UnionMember3)]
1445
3133
  end
1446
3134
 
1447
3135
  # The status of the call.
@@ -1453,7 +3141,9 @@ module Revox
1453
3141
  INITIALIZING = :initializing
1454
3142
  QUEUED_FOR_CALLING = :queued_for_calling
1455
3143
  CALLING = :calling
3144
+ POST_PROCESSING = :post_processing
1456
3145
  SCHEDULED = :scheduled
3146
+ PAUSED = :paused
1457
3147
  COMPLETED = :completed
1458
3148
  CANCELLED = :cancelled
1459
3149
  ERRORED = :errored
@@ -1461,6 +3151,24 @@ module Revox
1461
3151
  # @!method self.values
1462
3152
  # @return [Array<Symbol>]
1463
3153
  end
3154
+
3155
+ # Business outcome of the call. Null if not computed or no transcript.
3156
+ #
3157
+ # @see Revox::Models::CampaignGetRowsResponse::Row::Call#outcome
3158
+ module Outcome
3159
+ extend Revox::Internal::Type::Enum
3160
+
3161
+ NOT_INTERESTED = :not_interested
3162
+ INTERESTED = :interested
3163
+ COMPLETED = :completed
3164
+ REQUESTED_CALLBACK_LATER = :requested_callback_later
3165
+ REQUESTED_CALLBACK_NEW_NUMBER = :requested_callback_new_number
3166
+ DO_NOT_CONTACT = :do_not_contact
3167
+ AI_AVERSE = :ai_averse
3168
+
3169
+ # @!method self.values
3170
+ # @return [Array<Symbol>]
3171
+ end
1464
3172
  end
1465
3173
  end
1466
3174
  end