revox 0.1.0 → 0.3.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 (224) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +81 -0
  3. data/README.md +39 -14
  4. data/lib/revox/client.rb +23 -1
  5. data/lib/revox/internal/transport/base_client.rb +5 -0
  6. data/lib/revox/internal/type/base_model.rb +3 -3
  7. data/lib/revox/internal/util.rb +22 -7
  8. data/lib/revox/models/assistant_clone_params.rb +20 -0
  9. data/lib/revox/models/assistant_clone_response.rb +1594 -0
  10. data/lib/revox/models/assistant_create_params.rb +1038 -13
  11. data/lib/revox/models/assistant_create_response.rb +1071 -11
  12. data/lib/revox/models/assistant_list_response.rb +1070 -11
  13. data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
  14. data/lib/revox/models/assistant_update_params.rb +1038 -13
  15. data/lib/revox/models/assistant_update_response.rb +1097 -12
  16. data/lib/revox/models/auth_status_retrieve_params.rb +14 -0
  17. data/lib/revox/models/auth_status_retrieve_response.rb +17 -0
  18. data/lib/revox/models/call_cancel_params.rb +20 -0
  19. data/lib/revox/models/call_cancel_response.rb +16 -0
  20. data/lib/revox/models/call_create_params.rb +1065 -13
  21. data/lib/revox/models/call_create_response.rb +1820 -98
  22. data/lib/revox/models/call_export_params.rb +205 -0
  23. data/lib/revox/models/call_export_response.rb +22 -0
  24. data/lib/revox/models/call_pause_params.rb +20 -0
  25. data/lib/revox/models/call_pause_response.rb +16 -0
  26. data/lib/revox/models/call_phone_history_params.rb +14 -0
  27. data/lib/revox/models/call_phone_history_response.rb +98 -0
  28. data/lib/revox/models/call_resume_params.rb +20 -0
  29. data/lib/revox/models/call_resume_response.rb +16 -0
  30. data/lib/revox/models/call_retrieve_response.rb +1822 -98
  31. data/lib/revox/models/call_search_params.rb +171 -0
  32. data/lib/revox/models/call_search_response.rb +3114 -0
  33. data/lib/revox/models/campaign_create_params.rb +67 -2
  34. data/lib/revox/models/campaign_create_response.rb +1314 -59
  35. data/lib/revox/models/campaign_get_rows_params.rb +1 -46
  36. data/lib/revox/models/campaign_get_rows_response.rb +1833 -115
  37. data/lib/revox/models/campaign_launch_params.rb +20 -0
  38. data/lib/revox/models/campaign_launch_response.rb +2030 -0
  39. data/lib/revox/models/campaign_list_response.rb +1312 -59
  40. data/lib/revox/models/campaign_pause_params.rb +20 -0
  41. data/lib/revox/models/campaign_pause_response.rb +16 -0
  42. data/lib/revox/models/campaign_resume_params.rb +20 -0
  43. data/lib/revox/models/campaign_resume_response.rb +16 -0
  44. data/lib/revox/models/campaign_retrieve_response.rb +1312 -56
  45. data/lib/revox/models/campaign_statistics_params.rb +20 -0
  46. data/lib/revox/models/campaign_statistics_response.rb +486 -0
  47. data/lib/revox/models/campaign_update_params.rb +234 -0
  48. data/lib/revox/models/campaign_update_response.rb +2030 -0
  49. data/lib/revox/models/phone_number_delete_params.rb +20 -0
  50. data/lib/revox/models/phone_number_delete_response.rb +16 -0
  51. data/lib/revox/models/phone_number_list_params.rb +14 -0
  52. data/lib/revox/models/phone_number_list_response.rb +1777 -0
  53. data/lib/revox/models/phone_number_update_params.rb +32 -0
  54. data/lib/revox/models/phone_number_update_response.rb +1777 -0
  55. data/lib/revox/models/user_retrieve_params.rb +14 -0
  56. data/lib/revox/models/user_retrieve_response.rb +99 -0
  57. data/lib/revox/models/voice_clone_params.rb +78 -0
  58. data/lib/revox/models/voice_clone_response.rb +40 -0
  59. data/lib/revox/models/voice_delete_params.rb +20 -0
  60. data/lib/revox/models/voice_delete_response.rb +16 -0
  61. data/lib/revox/models/voice_list_response.rb +55 -1
  62. data/lib/revox/models/voice_preview_params.rb +49 -1
  63. data/lib/revox/models.rb +36 -2
  64. data/lib/revox/resources/assistants.rb +137 -8
  65. data/lib/revox/resources/auth_status.rb +32 -0
  66. data/lib/revox/resources/call.rb +131 -15
  67. data/lib/revox/resources/campaigns.rb +143 -17
  68. data/lib/revox/resources/phone_numbers.rb +74 -0
  69. data/lib/revox/resources/users.rb +17 -3
  70. data/lib/revox/resources/voices.rb +66 -10
  71. data/lib/revox/version.rb +1 -1
  72. data/lib/revox.rb +40 -7
  73. data/rbi/revox/client.rbi +6 -0
  74. data/rbi/revox/internal/util.rbi +8 -0
  75. data/rbi/revox/models/assistant_clone_params.rbi +33 -0
  76. data/rbi/revox/models/assistant_clone_response.rbi +3341 -0
  77. data/rbi/revox/models/assistant_create_params.rbi +2138 -103
  78. data/rbi/revox/models/assistant_create_response.rbi +2454 -199
  79. data/rbi/revox/models/assistant_list_response.rbi +2448 -195
  80. data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
  81. data/rbi/revox/models/assistant_update_params.rbi +2138 -103
  82. data/rbi/revox/models/assistant_update_response.rbi +2504 -198
  83. data/rbi/revox/models/auth_status_retrieve_params.rbi +27 -0
  84. data/rbi/revox/models/auth_status_retrieve_response.rbi +30 -0
  85. data/rbi/revox/models/call_cancel_params.rbi +33 -0
  86. data/rbi/revox/models/call_cancel_response.rbi +23 -0
  87. data/rbi/revox/models/call_create_params.rbi +2382 -225
  88. data/rbi/revox/models/call_create_response.rbi +4116 -384
  89. data/rbi/revox/models/call_export_params.rbi +456 -0
  90. data/rbi/revox/models/call_export_response.rbi +26 -0
  91. data/rbi/revox/models/call_pause_params.rbi +31 -0
  92. data/rbi/revox/models/call_pause_response.rbi +23 -0
  93. data/rbi/revox/models/call_phone_history_params.rbi +27 -0
  94. data/rbi/revox/models/call_phone_history_response.rbi +224 -0
  95. data/rbi/revox/models/call_resume_params.rbi +33 -0
  96. data/rbi/revox/models/call_resume_response.rbi +23 -0
  97. data/rbi/revox/models/call_retrieve_response.rbi +4133 -399
  98. data/rbi/revox/models/call_search_params.rbi +288 -0
  99. data/rbi/revox/models/call_search_response.rbi +6593 -0
  100. data/rbi/revox/models/campaign_create_params.rbi +136 -0
  101. data/rbi/revox/models/campaign_create_response.rbi +2911 -231
  102. data/rbi/revox/models/campaign_get_rows_params.rbi +2 -82
  103. data/rbi/revox/models/campaign_get_rows_response.rbi +4146 -409
  104. data/rbi/revox/models/campaign_launch_params.rbi +33 -0
  105. data/rbi/revox/models/campaign_launch_response.rbi +4170 -0
  106. data/rbi/revox/models/campaign_list_response.rbi +2904 -230
  107. data/rbi/revox/models/campaign_pause_params.rbi +33 -0
  108. data/rbi/revox/models/campaign_pause_response.rbi +23 -0
  109. data/rbi/revox/models/campaign_resume_params.rbi +33 -0
  110. data/rbi/revox/models/campaign_resume_response.rbi +23 -0
  111. data/rbi/revox/models/campaign_retrieve_response.rbi +2911 -231
  112. data/rbi/revox/models/campaign_statistics_params.rbi +33 -0
  113. data/rbi/revox/models/campaign_statistics_response.rbi +1011 -0
  114. data/rbi/revox/models/campaign_update_params.rbi +431 -0
  115. data/rbi/revox/models/campaign_update_response.rbi +4170 -0
  116. data/rbi/revox/models/phone_number_delete_params.rbi +33 -0
  117. data/rbi/revox/models/phone_number_delete_response.rbi +26 -0
  118. data/rbi/revox/models/phone_number_list_params.rbi +27 -0
  119. data/rbi/revox/models/phone_number_list_response.rbi +3680 -0
  120. data/rbi/revox/models/phone_number_update_params.rbi +53 -0
  121. data/rbi/revox/models/phone_number_update_response.rbi +3683 -0
  122. data/rbi/revox/models/user_retrieve_params.rbi +27 -0
  123. data/rbi/revox/models/user_retrieve_response.rbi +140 -0
  124. data/rbi/revox/models/voice_clone_params.rbi +141 -0
  125. data/rbi/revox/models/voice_clone_response.rbi +53 -0
  126. data/rbi/revox/models/voice_delete_params.rbi +33 -0
  127. data/rbi/revox/models/voice_delete_response.rbi +23 -0
  128. data/rbi/revox/models/voice_list_response.rbi +105 -3
  129. data/rbi/revox/models/voice_preview_params.rbi +69 -0
  130. data/rbi/revox/models.rbi +36 -2
  131. data/rbi/revox/resources/assistants.rbi +296 -8
  132. data/rbi/revox/resources/auth_status.rbi +21 -0
  133. data/rbi/revox/resources/call.rbi +92 -6
  134. data/rbi/revox/resources/campaigns.rbi +106 -19
  135. data/rbi/revox/resources/phone_numbers.rbi +43 -0
  136. data/rbi/revox/resources/users.rbi +8 -2
  137. data/rbi/revox/resources/voices.rbi +56 -9
  138. data/sig/revox/client.rbs +4 -0
  139. data/sig/revox/internal/util.rbs +4 -0
  140. data/sig/revox/models/assistant_clone_params.rbs +20 -0
  141. data/sig/revox/models/assistant_clone_response.rbs +1318 -0
  142. data/sig/revox/models/assistant_create_params.rbs +844 -11
  143. data/sig/revox/models/assistant_create_response.rbs +860 -3
  144. data/sig/revox/models/assistant_list_response.rbs +860 -3
  145. data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
  146. data/sig/revox/models/assistant_update_params.rbs +844 -11
  147. data/sig/revox/models/assistant_update_response.rbs +886 -6
  148. data/sig/revox/models/auth_status_retrieve_params.rbs +15 -0
  149. data/sig/revox/models/auth_status_retrieve_response.rbs +13 -0
  150. data/sig/revox/models/call_cancel_params.rbs +20 -0
  151. data/sig/revox/models/call_cancel_response.rbs +13 -0
  152. data/sig/revox/models/call_create_params.rbs +847 -13
  153. data/sig/revox/models/call_create_response.rbs +1519 -34
  154. data/sig/revox/models/call_export_params.rbs +234 -0
  155. data/sig/revox/models/call_export_response.rbs +15 -0
  156. data/sig/revox/models/call_pause_params.rbs +20 -0
  157. data/sig/revox/models/call_pause_response.rbs +13 -0
  158. data/sig/revox/models/call_phone_history_params.rbs +15 -0
  159. data/sig/revox/models/call_phone_history_response.rbs +102 -0
  160. data/sig/revox/models/call_resume_params.rbs +20 -0
  161. data/sig/revox/models/call_resume_response.rbs +13 -0
  162. data/sig/revox/models/call_retrieve_response.rbs +1519 -34
  163. data/sig/revox/models/call_search_params.rbs +198 -0
  164. data/sig/revox/models/call_search_response.rbs +2654 -0
  165. data/sig/revox/models/campaign_create_params.rbs +54 -0
  166. data/sig/revox/models/campaign_create_response.rbs +1034 -6
  167. data/sig/revox/models/campaign_get_rows_params.rbs +2 -64
  168. data/sig/revox/models/campaign_get_rows_response.rbs +1527 -54
  169. data/sig/revox/models/campaign_launch_params.rbs +20 -0
  170. data/sig/revox/models/campaign_launch_response.rbs +1694 -0
  171. data/sig/revox/models/campaign_list_response.rbs +1034 -6
  172. data/sig/revox/models/campaign_pause_params.rbs +20 -0
  173. data/sig/revox/models/campaign_pause_response.rbs +13 -0
  174. data/sig/revox/models/campaign_resume_params.rbs +20 -0
  175. data/sig/revox/models/campaign_resume_response.rbs +13 -0
  176. data/sig/revox/models/campaign_retrieve_response.rbs +1034 -6
  177. data/sig/revox/models/campaign_statistics_params.rbs +20 -0
  178. data/sig/revox/models/campaign_statistics_response.rbs +458 -0
  179. data/sig/revox/models/campaign_update_params.rbs +203 -0
  180. data/sig/revox/models/campaign_update_response.rbs +1694 -0
  181. data/sig/revox/models/phone_number_delete_params.rbs +20 -0
  182. data/sig/revox/models/phone_number_delete_response.rbs +13 -0
  183. data/sig/revox/models/phone_number_list_params.rbs +15 -0
  184. data/sig/revox/models/phone_number_list_response.rbs +1462 -0
  185. data/sig/revox/models/phone_number_update_params.rbs +32 -0
  186. data/sig/revox/models/phone_number_update_response.rbs +1460 -0
  187. data/sig/revox/models/user_retrieve_params.rbs +14 -0
  188. data/sig/revox/models/user_retrieve_response.rbs +71 -0
  189. data/sig/revox/models/voice_clone_params.rbs +79 -0
  190. data/sig/revox/models/voice_clone_response.rbs +40 -0
  191. data/sig/revox/models/voice_delete_params.rbs +20 -0
  192. data/sig/revox/models/voice_delete_response.rbs +13 -0
  193. data/sig/revox/models/voice_list_response.rbs +45 -3
  194. data/sig/revox/models/voice_preview_params.rbs +42 -1
  195. data/sig/revox/models.rbs +36 -2
  196. data/sig/revox/resources/assistants.rbs +61 -2
  197. data/sig/revox/resources/auth_status.rbs +11 -0
  198. data/sig/revox/resources/call.rbs +41 -3
  199. data/sig/revox/resources/campaigns.rbs +35 -5
  200. data/sig/revox/resources/phone_numbers.rbs +23 -0
  201. data/sig/revox/resources/users.rbs +3 -1
  202. data/sig/revox/resources/voices.rbs +17 -0
  203. metadata +122 -23
  204. data/lib/revox/models/call_list_params.rb +0 -52
  205. data/lib/revox/models/call_list_response.rb +0 -259
  206. data/lib/revox/models/users/me_retrieve_params.rb +0 -16
  207. data/lib/revox/models/users/me_retrieve_response.rb +0 -89
  208. data/lib/revox/models/users/me_update_params.rb +0 -22
  209. data/lib/revox/models/users/me_update_response.rb +0 -89
  210. data/lib/revox/resources/users/me.rb +0 -55
  211. data/rbi/revox/models/call_list_params.rbi +0 -94
  212. data/rbi/revox/models/call_list_response.rbi +0 -563
  213. data/rbi/revox/models/users/me_retrieve_params.rbi +0 -29
  214. data/rbi/revox/models/users/me_retrieve_response.rbi +0 -139
  215. data/rbi/revox/models/users/me_update_params.rbi +0 -43
  216. data/rbi/revox/models/users/me_update_response.rbi +0 -139
  217. data/rbi/revox/resources/users/me.rbi +0 -33
  218. data/sig/revox/models/call_list_params.rbs +0 -63
  219. data/sig/revox/models/call_list_response.rbs +0 -226
  220. data/sig/revox/models/users/me_retrieve_params.rbs +0 -16
  221. data/sig/revox/models/users/me_retrieve_response.rbs +0 -70
  222. data/sig/revox/models/users/me_update_params.rbs +0 -28
  223. data/sig/revox/models/users/me_update_response.rbs +0 -70
  224. data/sig/revox/resources/users/me.rbs +0 -18
@@ -68,9 +68,19 @@ module Revox
68
68
  end
69
69
  attr_accessor :status
70
70
 
71
+ sig do
72
+ returns(
73
+ Revox::Models::CampaignCreateResponse::Campaign::Type::TaggedSymbol
74
+ )
75
+ end
76
+ attr_accessor :type
77
+
71
78
  sig { returns(T.anything) }
72
79
  attr_accessor :updated_at
73
80
 
81
+ sig { returns(T.nilable(String)) }
82
+ attr_accessor :active_takeover_call_id
83
+
74
84
  sig do
75
85
  returns(
76
86
  T.nilable(
@@ -109,12 +119,64 @@ module Revox
109
119
  end
110
120
  attr_writer :call_retry_config
111
121
 
122
+ # A member of the current organization.
123
+ sig do
124
+ returns(
125
+ T.nilable(
126
+ Revox::Models::CampaignCreateResponse::Campaign::CreatedBy
127
+ )
128
+ )
129
+ end
130
+ attr_reader :created_by
131
+
132
+ sig do
133
+ params(
134
+ created_by:
135
+ T.nilable(
136
+ Revox::Models::CampaignCreateResponse::Campaign::CreatedBy::OrHash
137
+ )
138
+ ).void
139
+ end
140
+ attr_writer :created_by
141
+
112
142
  sig { returns(T.nilable(String)) }
113
143
  attr_accessor :from_phone_number
114
144
 
145
+ sig do
146
+ returns(
147
+ T.nilable(
148
+ Revox::Models::CampaignCreateResponse::Campaign::FunnelStats
149
+ )
150
+ )
151
+ end
152
+ attr_reader :funnel_stats
153
+
154
+ sig do
155
+ params(
156
+ funnel_stats:
157
+ Revox::Models::CampaignCreateResponse::Campaign::FunnelStats::OrHash
158
+ ).void
159
+ end
160
+ attr_writer :funnel_stats
161
+
115
162
  sig { returns(T.nilable(Float)) }
116
163
  attr_accessor :max_concurrent_calls
117
164
 
165
+ sig do
166
+ returns(
167
+ T.nilable(
168
+ Revox::Models::CampaignCreateResponse::Campaign::PausedReason::TaggedSymbol
169
+ )
170
+ )
171
+ end
172
+ attr_accessor :paused_reason
173
+
174
+ sig { returns(T.nilable(Float)) }
175
+ attr_reader :present_count
176
+
177
+ sig { params(present_count: Float).void }
178
+ attr_writer :present_count
179
+
118
180
  sig do
119
181
  returns(
120
182
  T.nilable(Revox::Models::CampaignCreateResponse::Campaign::RowStats)
@@ -136,6 +198,24 @@ module Revox
136
198
  sig { params(scheduled_at: T.anything).void }
137
199
  attr_writer :scheduled_at
138
200
 
201
+ # The status of the structured output extraction.
202
+ sig do
203
+ returns(
204
+ T.nilable(
205
+ Revox::Models::CampaignCreateResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
206
+ )
207
+ )
208
+ end
209
+ attr_reader :structured_output_extraction
210
+
211
+ sig do
212
+ params(
213
+ structured_output_extraction:
214
+ Revox::Models::CampaignCreateResponse::Campaign::StructuredOutputExtraction::OrSymbol
215
+ ).void
216
+ end
217
+ attr_writer :structured_output_extraction
218
+
139
219
  sig do
140
220
  params(
141
221
  id: String,
@@ -146,18 +226,34 @@ module Revox
146
226
  organization_id: String,
147
227
  status:
148
228
  Revox::Models::CampaignCreateResponse::Campaign::Status::OrSymbol,
229
+ type:
230
+ Revox::Models::CampaignCreateResponse::Campaign::Type::OrSymbol,
149
231
  updated_at: T.anything,
232
+ active_takeover_call_id: T.nilable(String),
150
233
  assistant:
151
234
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::OrHash,
152
235
  call_retry_config:
153
236
  T.nilable(
154
237
  Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::OrHash
155
238
  ),
239
+ created_by:
240
+ T.nilable(
241
+ Revox::Models::CampaignCreateResponse::Campaign::CreatedBy::OrHash
242
+ ),
156
243
  from_phone_number: T.nilable(String),
244
+ funnel_stats:
245
+ Revox::Models::CampaignCreateResponse::Campaign::FunnelStats::OrHash,
157
246
  max_concurrent_calls: T.nilable(Float),
247
+ paused_reason:
248
+ T.nilable(
249
+ Revox::Models::CampaignCreateResponse::Campaign::PausedReason::OrSymbol
250
+ ),
251
+ present_count: Float,
158
252
  row_stats:
159
253
  Revox::Models::CampaignCreateResponse::Campaign::RowStats::OrHash,
160
- scheduled_at: T.anything
254
+ scheduled_at: T.anything,
255
+ structured_output_extraction:
256
+ Revox::Models::CampaignCreateResponse::Campaign::StructuredOutputExtraction::OrSymbol
161
257
  ).returns(T.attached_class)
162
258
  end
163
259
  def self.new(
@@ -168,15 +264,24 @@ module Revox
168
264
  name:,
169
265
  organization_id:,
170
266
  status:,
267
+ type:,
171
268
  updated_at:,
269
+ active_takeover_call_id: nil,
172
270
  assistant: nil,
173
271
  # Configuration for call retry behavior including time windows, delays, and max
174
272
  # iterations. If not provided, defaults will be used.
175
273
  call_retry_config: nil,
274
+ # A member of the current organization.
275
+ created_by: nil,
176
276
  from_phone_number: nil,
277
+ funnel_stats: nil,
177
278
  max_concurrent_calls: nil,
279
+ paused_reason: nil,
280
+ present_count: nil,
178
281
  row_stats: nil,
179
- scheduled_at: nil
282
+ scheduled_at: nil,
283
+ # The status of the structured output extraction.
284
+ structured_output_extraction: nil
180
285
  )
181
286
  end
182
287
 
@@ -191,18 +296,34 @@ module Revox
191
296
  organization_id: String,
192
297
  status:
193
298
  Revox::Models::CampaignCreateResponse::Campaign::Status::TaggedSymbol,
299
+ type:
300
+ Revox::Models::CampaignCreateResponse::Campaign::Type::TaggedSymbol,
194
301
  updated_at: T.anything,
302
+ active_takeover_call_id: T.nilable(String),
195
303
  assistant:
196
304
  Revox::Models::CampaignCreateResponse::Campaign::Assistant,
197
305
  call_retry_config:
198
306
  T.nilable(
199
307
  Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig
200
308
  ),
309
+ created_by:
310
+ T.nilable(
311
+ Revox::Models::CampaignCreateResponse::Campaign::CreatedBy
312
+ ),
201
313
  from_phone_number: T.nilable(String),
314
+ funnel_stats:
315
+ Revox::Models::CampaignCreateResponse::Campaign::FunnelStats,
202
316
  max_concurrent_calls: T.nilable(Float),
317
+ paused_reason:
318
+ T.nilable(
319
+ Revox::Models::CampaignCreateResponse::Campaign::PausedReason::TaggedSymbol
320
+ ),
321
+ present_count: Float,
203
322
  row_stats:
204
323
  Revox::Models::CampaignCreateResponse::Campaign::RowStats,
205
- scheduled_at: T.anything
324
+ scheduled_at: T.anything,
325
+ structured_output_extraction:
326
+ Revox::Models::CampaignCreateResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
206
327
  }
207
328
  )
208
329
  end
@@ -253,6 +374,40 @@ module Revox
253
374
  end
254
375
  end
255
376
 
377
+ module Type
378
+ extend Revox::Internal::Type::Enum
379
+
380
+ TaggedSymbol =
381
+ T.type_alias do
382
+ T.all(
383
+ Symbol,
384
+ Revox::Models::CampaignCreateResponse::Campaign::Type
385
+ )
386
+ end
387
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
388
+
389
+ REGULAR =
390
+ T.let(
391
+ :regular,
392
+ Revox::Models::CampaignCreateResponse::Campaign::Type::TaggedSymbol
393
+ )
394
+ JUMP_IN =
395
+ T.let(
396
+ :jump_in,
397
+ Revox::Models::CampaignCreateResponse::Campaign::Type::TaggedSymbol
398
+ )
399
+
400
+ sig do
401
+ override.returns(
402
+ T::Array[
403
+ Revox::Models::CampaignCreateResponse::Campaign::Type::TaggedSymbol
404
+ ]
405
+ )
406
+ end
407
+ def self.values
408
+ end
409
+ end
410
+
256
411
  class Assistant < Revox::Internal::Type::BaseModel
257
412
  OrHash =
258
413
  T.type_alias do
@@ -265,8 +420,25 @@ module Revox
265
420
  sig { returns(String) }
266
421
  attr_accessor :id
267
422
 
268
- # The background sound to play during the call. Useful to give the impression that
269
- # your AI agent is in an office.
423
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
424
+ # after-call SMS is sent. Use "none" when outcome is null.
425
+ sig do
426
+ returns(
427
+ T.nilable(
428
+ T::Array[
429
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
430
+ ]
431
+ )
432
+ )
433
+ end
434
+ attr_accessor :after_call_sms_outcomes
435
+
436
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
437
+ # placeholders. When null, no after-call SMS is sent.
438
+ sig { returns(T.nilable(String)) }
439
+ attr_accessor :after_call_sms_prompt
440
+
441
+ # Ambient background sound to play during the call. null disables it.
270
442
  sig do
271
443
  returns(
272
444
  T.nilable(
@@ -276,6 +448,10 @@ module Revox
276
448
  end
277
449
  attr_accessor :background_sound
278
450
 
451
+ # Volume of the ambient background sound (0 = silent, 1 = max).
452
+ sig { returns(Float) }
453
+ attr_accessor :background_sound_volume
454
+
279
455
  sig do
280
456
  returns(
281
457
  T.nilable(
@@ -316,9 +492,51 @@ module Revox
316
492
  end
317
493
  attr_writer :call_retry_config
318
494
 
495
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
496
+ sig { returns(T.nilable(String)) }
497
+ attr_accessor :cartesia_dictionary_pronunciation_id
498
+
319
499
  sig { returns(T.anything) }
320
500
  attr_accessor :created_at
321
501
 
502
+ sig do
503
+ returns(
504
+ T.nilable(
505
+ T::Array[
506
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool
507
+ ]
508
+ )
509
+ )
510
+ end
511
+ attr_accessor :custom_tools
512
+
513
+ # Email address(es) to receive notifications when a call ends with a matching
514
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
515
+ # bob@y.com").
516
+ sig { returns(T.nilable(String)) }
517
+ attr_accessor :email_notification_address
518
+
519
+ # The language used for the notification email content. One of "en" or "fr".
520
+ sig do
521
+ returns(
522
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
523
+ )
524
+ end
525
+ attr_accessor :email_notification_language
526
+
527
+ # Which call outcomes trigger an email notification. E.g. ["interested",
528
+ # "completed", "none"]. Use "none" when outcome is null.
529
+ sig do
530
+ returns(
531
+ T.nilable(
532
+ T::Array[
533
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
534
+ ]
535
+ )
536
+ )
537
+ end
538
+ attr_accessor :email_notification_outcomes
539
+
322
540
  sig { returns(T.nilable(String)) }
323
541
  attr_accessor :end_of_call_sentence
324
542
 
@@ -336,6 +554,22 @@ module Revox
336
554
  end
337
555
  attr_accessor :first_sentence_mode
338
556
 
557
+ # Override the default outbound phone number for calls placed with this assistant.
558
+ # When null, the organization's default phone number is used.
559
+ sig { returns(T.nilable(String)) }
560
+ attr_accessor :from_phone_number
561
+
562
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
563
+ # not configured.
564
+ sig do
565
+ returns(
566
+ T.nilable(
567
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
568
+ )
569
+ )
570
+ end
571
+ attr_accessor :human_transfer_mode
572
+
339
573
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
340
574
  # skip turns to navigate phone menus.
341
575
  sig { returns(T::Boolean) }
@@ -348,20 +582,99 @@ module Revox
348
582
  end
349
583
  attr_accessor :llm_model
350
584
 
585
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
586
+ # unset.
587
+ sig { returns(T.nilable(String)) }
588
+ attr_accessor :logo_url
589
+
351
590
  # The maximum duration of the call in seconds. This is the maximum time the call
352
591
  # will be allowed to run.
353
592
  sig { returns(Float) }
354
593
  attr_accessor :max_call_duration_secs
355
594
 
595
+ # Optional message the agent will say, without being interruptible, when the call
596
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
597
+ # null, the call ends silently.
598
+ sig { returns(T.nilable(String)) }
599
+ attr_accessor :max_duration_end_message
600
+
356
601
  sig { returns(String) }
357
602
  attr_accessor :name
358
603
 
359
604
  sig { returns(String) }
360
605
  attr_accessor :organization_id
361
606
 
607
+ sig do
608
+ returns(
609
+ T.nilable(
610
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Position
611
+ )
612
+ )
613
+ end
614
+ attr_reader :position
615
+
616
+ sig do
617
+ params(
618
+ position:
619
+ T.nilable(
620
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Position::OrHash
621
+ )
622
+ ).void
623
+ end
624
+ attr_writer :position
625
+
362
626
  sig { returns(String) }
363
627
  attr_accessor :prompt
364
628
 
629
+ sig do
630
+ returns(
631
+ T.nilable(
632
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow
633
+ )
634
+ )
635
+ end
636
+ attr_reader :prompt_flow
637
+
638
+ sig do
639
+ params(
640
+ prompt_flow:
641
+ T.nilable(
642
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::OrHash
643
+ )
644
+ ).void
645
+ end
646
+ attr_writer :prompt_flow
647
+
648
+ sig do
649
+ returns(
650
+ T.nilable(
651
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack
652
+ )
653
+ )
654
+ end
655
+ attr_reader :slack
656
+
657
+ sig do
658
+ params(
659
+ slack:
660
+ T.nilable(
661
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::OrHash
662
+ )
663
+ ).void
664
+ end
665
+ attr_writer :slack
666
+
667
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
668
+ # the user on the call.
669
+ sig { returns(T::Boolean) }
670
+ attr_accessor :sms_enabled
671
+
672
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
673
+ # instead of letting the agent generate the message. Supports {{variable}}
674
+ # placeholders.
675
+ sig { returns(T.nilable(String)) }
676
+ attr_accessor :sms_template
677
+
365
678
  # The structured output config to use for the call. This is used to extract the
366
679
  # data from the call (like email, name, company name, etc.).
367
680
  sig do
@@ -375,10 +688,73 @@ module Revox
375
688
  end
376
689
  attr_accessor :structured_output_config
377
690
 
691
+ # Custom prompt for structured data extraction. If not provided, a default prompt
692
+ # is used. Available variables: {{transcript}}, {{call_direction}},
693
+ # {{user_phone_number}}, {{agent_phone_number}}.
694
+ sig { returns(T.nilable(String)) }
695
+ attr_accessor :structured_output_prompt
696
+
697
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
698
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
699
+ # replacing existing entries.
700
+ sig do
701
+ returns(
702
+ T.nilable(
703
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttContext
704
+ )
705
+ )
706
+ end
707
+ attr_reader :stt_context
708
+
709
+ sig do
710
+ params(
711
+ stt_context:
712
+ T.nilable(
713
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttContext::OrHash
714
+ )
715
+ ).void
716
+ end
717
+ attr_writer :stt_context
718
+
719
+ # Transcriber (speech-to-text) model used for the assistant.
720
+ sig do
721
+ returns(
722
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttModel::TaggedSymbol
723
+ )
724
+ end
725
+ attr_accessor :stt_model
726
+
727
+ # Audio clip to play while the agent is processing a response. One of the built-in
728
+ # LiveKit audio clips; null disables it.
729
+ sig do
730
+ returns(
731
+ T.nilable(
732
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
733
+ )
734
+ )
735
+ end
736
+ attr_accessor :thinking_sound
737
+
738
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
739
+ # the agent is silent while thinking.
740
+ sig { returns(Float) }
741
+ attr_accessor :thinking_sound_probability
742
+
743
+ # Volume of the thinking sound (0 = silent, 1 = max).
744
+ sig { returns(Float) }
745
+ attr_accessor :thinking_sound_volume
746
+
378
747
  # Phone number to transfer calls to when users request to speak to a human agent.
379
748
  sig { returns(T.nilable(String)) }
380
749
  attr_accessor :transfer_phone_number
381
750
 
751
+ sig do
752
+ returns(
753
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Type::TaggedSymbol
754
+ )
755
+ end
756
+ attr_accessor :type
757
+
382
758
  sig { returns(T.anything) }
383
759
  attr_accessor :updated_at
384
760
 
@@ -406,10 +782,59 @@ module Revox
406
782
  sig { returns(T.nilable(String)) }
407
783
  attr_accessor :voicemail_message
408
784
 
785
+ # Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
786
+ # When null, no SMS is sent on voicemail.
787
+ sig { returns(T.nilable(String)) }
788
+ attr_accessor :voicemail_sms_prompt
789
+
790
+ # Warm transfer only: instructions for the supervisor handoff summary; null when
791
+ # not configured or cold transfer.
792
+ sig { returns(T.nilable(String)) }
793
+ attr_accessor :warm_transfer_summary_instructions
794
+
409
795
  # The webhook URL to call when the call is completed.
410
796
  sig { returns(T.nilable(String)) }
411
797
  attr_accessor :webhook_url
412
798
 
799
+ sig do
800
+ returns(
801
+ T.nilable(
802
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho
803
+ )
804
+ )
805
+ end
806
+ attr_reader :zoho
807
+
808
+ sig do
809
+ params(
810
+ zoho:
811
+ T.nilable(
812
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::OrHash
813
+ )
814
+ ).void
815
+ end
816
+ attr_writer :zoho
817
+
818
+ # The user who created the assistant.
819
+ sig do
820
+ returns(
821
+ T.nilable(
822
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CreatedBy
823
+ )
824
+ )
825
+ end
826
+ attr_reader :created_by
827
+
828
+ sig do
829
+ params(
830
+ created_by:
831
+ T.nilable(
832
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CreatedBy::OrHash
833
+ )
834
+ ).void
835
+ end
836
+ attr_writer :created_by
837
+
413
838
  sig do
414
839
  returns(
415
840
  T.nilable(
@@ -431,6 +856,12 @@ module Revox
431
856
  end
432
857
  attr_writer :faq_items
433
858
 
859
+ sig { returns(T.nilable(T::Boolean)) }
860
+ attr_reader :is_realestate_assistant
861
+
862
+ sig { params(is_realestate_assistant: T::Boolean).void }
863
+ attr_writer :is_realestate_assistant
864
+
434
865
  sig { returns(T.nilable(Float)) }
435
866
  attr_reader :pending_faq_count
436
867
 
@@ -440,10 +871,18 @@ module Revox
440
871
  sig do
441
872
  params(
442
873
  id: String,
874
+ after_call_sms_outcomes:
875
+ T.nilable(
876
+ T::Array[
877
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::OrSymbol
878
+ ]
879
+ ),
880
+ after_call_sms_prompt: T.nilable(String),
443
881
  background_sound:
444
882
  T.nilable(
445
883
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::BackgroundSound::OrSymbol
446
884
  ),
885
+ background_sound_volume: Float,
447
886
  calendly:
448
887
  T.nilable(
449
888
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::Calendly::OrHash
@@ -452,81 +891,217 @@ module Revox
452
891
  T.nilable(
453
892
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::OrHash
454
893
  ),
894
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
455
895
  created_at: T.anything,
896
+ custom_tools:
897
+ T.nilable(
898
+ T::Array[
899
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::OrHash
900
+ ]
901
+ ),
902
+ email_notification_address: T.nilable(String),
903
+ email_notification_language:
904
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationLanguage::OrSymbol,
905
+ email_notification_outcomes:
906
+ T.nilable(
907
+ T::Array[
908
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::OrSymbol
909
+ ]
910
+ ),
456
911
  end_of_call_sentence: T.nilable(String),
457
912
  first_sentence: T.nilable(String),
458
913
  first_sentence_delay_ms: Integer,
459
914
  first_sentence_mode:
460
915
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::OrSymbol,
916
+ from_phone_number: T.nilable(String),
917
+ human_transfer_mode:
918
+ T.nilable(
919
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::HumanTransferMode::OrSymbol
920
+ ),
461
921
  ivr_navigation_enabled: T::Boolean,
462
922
  llm_model:
463
923
  T.any(
464
924
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::OrHash,
465
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember1::OrHash
925
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember1::OrHash,
926
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember2::OrHash,
927
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3::OrHash
466
928
  ),
929
+ logo_url: T.nilable(String),
467
930
  max_call_duration_secs: Float,
931
+ max_duration_end_message: T.nilable(String),
468
932
  name: String,
469
933
  organization_id: String,
934
+ position:
935
+ T.nilable(
936
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Position::OrHash
937
+ ),
470
938
  prompt: String,
939
+ prompt_flow:
940
+ T.nilable(
941
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::OrHash
942
+ ),
943
+ slack:
944
+ T.nilable(
945
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::OrHash
946
+ ),
947
+ sms_enabled: T::Boolean,
948
+ sms_template: T.nilable(String),
471
949
  structured_output_config:
472
950
  T.nilable(
473
951
  T::Array[
474
952
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::OrHash
475
953
  ]
476
954
  ),
955
+ structured_output_prompt: T.nilable(String),
956
+ stt_context:
957
+ T.nilable(
958
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttContext::OrHash
959
+ ),
960
+ stt_model:
961
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttModel::OrSymbol,
962
+ thinking_sound:
963
+ T.nilable(
964
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::OrSymbol
965
+ ),
966
+ thinking_sound_probability: Float,
967
+ thinking_sound_volume: Float,
477
968
  transfer_phone_number: T.nilable(String),
969
+ type:
970
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Type::OrSymbol,
478
971
  updated_at: T.anything,
479
972
  voice:
480
973
  T.nilable(
481
974
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::OrHash
482
975
  ),
483
976
  voicemail_message: T.nilable(String),
977
+ voicemail_sms_prompt: T.nilable(String),
978
+ warm_transfer_summary_instructions: T.nilable(String),
484
979
  webhook_url: T.nilable(String),
980
+ zoho:
981
+ T.nilable(
982
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::OrHash
983
+ ),
984
+ created_by:
985
+ T.nilable(
986
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CreatedBy::OrHash
987
+ ),
485
988
  faq_items:
486
989
  T::Array[
487
990
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::FaqItem::OrHash
488
991
  ],
992
+ is_realestate_assistant: T::Boolean,
489
993
  pending_faq_count: Float
490
994
  ).returns(T.attached_class)
491
995
  end
492
996
  def self.new(
493
997
  id:,
494
- # The background sound to play during the call. Useful to give the impression that
495
- # your AI agent is in an office.
998
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
999
+ # after-call SMS is sent. Use "none" when outcome is null.
1000
+ after_call_sms_outcomes:,
1001
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
1002
+ # placeholders. When null, no after-call SMS is sent.
1003
+ after_call_sms_prompt:,
1004
+ # Ambient background sound to play during the call. null disables it.
496
1005
  background_sound:,
1006
+ # Volume of the ambient background sound (0 = silent, 1 = max).
1007
+ background_sound_volume:,
497
1008
  calendly:,
498
1009
  # Configuration for call retry behavior including time windows, delays, and max
499
1010
  # iterations. If not provided, defaults will be used.
500
1011
  call_retry_config:,
1012
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
1013
+ cartesia_dictionary_pronunciation_id:,
501
1014
  created_at:,
1015
+ custom_tools:,
1016
+ # Email address(es) to receive notifications when a call ends with a matching
1017
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
1018
+ # bob@y.com").
1019
+ email_notification_address:,
1020
+ # The language used for the notification email content. One of "en" or "fr".
1021
+ email_notification_language:,
1022
+ # Which call outcomes trigger an email notification. E.g. ["interested",
1023
+ # "completed", "none"]. Use "none" when outcome is null.
1024
+ email_notification_outcomes:,
502
1025
  end_of_call_sentence:,
503
1026
  first_sentence:,
504
1027
  # Delay in milliseconds before speaking the first sentence. Default: 400.
505
1028
  first_sentence_delay_ms:,
506
1029
  first_sentence_mode:,
1030
+ # Override the default outbound phone number for calls placed with this assistant.
1031
+ # When null, the organization's default phone number is used.
1032
+ from_phone_number:,
1033
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1034
+ # not configured.
1035
+ human_transfer_mode:,
507
1036
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
508
1037
  # skip turns to navigate phone menus.
509
1038
  ivr_navigation_enabled:,
510
1039
  llm_model:,
1040
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
1041
+ # unset.
1042
+ logo_url:,
511
1043
  # The maximum duration of the call in seconds. This is the maximum time the call
512
1044
  # will be allowed to run.
513
1045
  max_call_duration_secs:,
1046
+ # Optional message the agent will say, without being interruptible, when the call
1047
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
1048
+ # null, the call ends silently.
1049
+ max_duration_end_message:,
514
1050
  name:,
515
1051
  organization_id:,
1052
+ position:,
516
1053
  prompt:,
1054
+ prompt_flow:,
1055
+ slack:,
1056
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
1057
+ # the user on the call.
1058
+ sms_enabled:,
1059
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
1060
+ # instead of letting the agent generate the message. Supports {{variable}}
1061
+ # placeholders.
1062
+ sms_template:,
517
1063
  # The structured output config to use for the call. This is used to extract the
518
1064
  # data from the call (like email, name, company name, etc.).
519
1065
  structured_output_config:,
1066
+ # Custom prompt for structured data extraction. If not provided, a default prompt
1067
+ # is used. Available variables: {{transcript}}, {{call_direction}},
1068
+ # {{user_phone_number}}, {{agent_phone_number}}.
1069
+ structured_output_prompt:,
1070
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
1071
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
1072
+ # replacing existing entries.
1073
+ stt_context:,
1074
+ # Transcriber (speech-to-text) model used for the assistant.
1075
+ stt_model:,
1076
+ # Audio clip to play while the agent is processing a response. One of the built-in
1077
+ # LiveKit audio clips; null disables it.
1078
+ thinking_sound:,
1079
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
1080
+ # the agent is silent while thinking.
1081
+ thinking_sound_probability:,
1082
+ # Volume of the thinking sound (0 = silent, 1 = max).
1083
+ thinking_sound_volume:,
520
1084
  # Phone number to transfer calls to when users request to speak to a human agent.
521
1085
  transfer_phone_number:,
1086
+ type:,
522
1087
  updated_at:,
523
1088
  voice:,
524
1089
  # If set, when voicemail is detected the agent will speak this message then hang
525
1090
  # up; if null, hang up immediately.
526
1091
  voicemail_message:,
1092
+ # Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
1093
+ # When null, no SMS is sent on voicemail.
1094
+ voicemail_sms_prompt:,
1095
+ # Warm transfer only: instructions for the supervisor handoff summary; null when
1096
+ # not configured or cold transfer.
1097
+ warm_transfer_summary_instructions:,
527
1098
  # The webhook URL to call when the call is completed.
528
1099
  webhook_url:,
1100
+ zoho:,
1101
+ # The user who created the assistant.
1102
+ created_by: nil,
529
1103
  faq_items: nil,
1104
+ is_realestate_assistant: nil,
530
1105
  pending_faq_count: nil
531
1106
  )
532
1107
  end
@@ -535,10 +1110,18 @@ module Revox
535
1110
  override.returns(
536
1111
  {
537
1112
  id: String,
1113
+ after_call_sms_outcomes:
1114
+ T.nilable(
1115
+ T::Array[
1116
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1117
+ ]
1118
+ ),
1119
+ after_call_sms_prompt: T.nilable(String),
538
1120
  background_sound:
539
1121
  T.nilable(
540
1122
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::BackgroundSound::TaggedSymbol
541
1123
  ),
1124
+ background_sound_volume: Float,
542
1125
  calendly:
543
1126
  T.nilable(
544
1127
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::Calendly
@@ -547,37 +1130,100 @@ module Revox
547
1130
  T.nilable(
548
1131
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig
549
1132
  ),
1133
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
550
1134
  created_at: T.anything,
1135
+ custom_tools:
1136
+ T.nilable(
1137
+ T::Array[
1138
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool
1139
+ ]
1140
+ ),
1141
+ email_notification_address: T.nilable(String),
1142
+ email_notification_language:
1143
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol,
1144
+ email_notification_outcomes:
1145
+ T.nilable(
1146
+ T::Array[
1147
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
1148
+ ]
1149
+ ),
551
1150
  end_of_call_sentence: T.nilable(String),
552
1151
  first_sentence: T.nilable(String),
553
1152
  first_sentence_delay_ms: Integer,
554
1153
  first_sentence_mode:
555
1154
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol,
1155
+ from_phone_number: T.nilable(String),
1156
+ human_transfer_mode:
1157
+ T.nilable(
1158
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
1159
+ ),
556
1160
  ivr_navigation_enabled: T::Boolean,
557
1161
  llm_model:
558
1162
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::Variants,
1163
+ logo_url: T.nilable(String),
559
1164
  max_call_duration_secs: Float,
1165
+ max_duration_end_message: T.nilable(String),
560
1166
  name: String,
561
1167
  organization_id: String,
1168
+ position:
1169
+ T.nilable(
1170
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Position
1171
+ ),
562
1172
  prompt: String,
1173
+ prompt_flow:
1174
+ T.nilable(
1175
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow
1176
+ ),
1177
+ slack:
1178
+ T.nilable(
1179
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack
1180
+ ),
1181
+ sms_enabled: T::Boolean,
1182
+ sms_template: T.nilable(String),
563
1183
  structured_output_config:
564
1184
  T.nilable(
565
1185
  T::Array[
566
1186
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig
567
1187
  ]
568
1188
  ),
1189
+ structured_output_prompt: T.nilable(String),
1190
+ stt_context:
1191
+ T.nilable(
1192
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttContext
1193
+ ),
1194
+ stt_model:
1195
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttModel::TaggedSymbol,
1196
+ thinking_sound:
1197
+ T.nilable(
1198
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
1199
+ ),
1200
+ thinking_sound_probability: Float,
1201
+ thinking_sound_volume: Float,
569
1202
  transfer_phone_number: T.nilable(String),
1203
+ type:
1204
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Type::TaggedSymbol,
570
1205
  updated_at: T.anything,
571
1206
  voice:
572
1207
  T.nilable(
573
1208
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice
574
1209
  ),
575
1210
  voicemail_message: T.nilable(String),
1211
+ voicemail_sms_prompt: T.nilable(String),
1212
+ warm_transfer_summary_instructions: T.nilable(String),
576
1213
  webhook_url: T.nilable(String),
1214
+ zoho:
1215
+ T.nilable(
1216
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho
1217
+ ),
1218
+ created_by:
1219
+ T.nilable(
1220
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CreatedBy
1221
+ ),
577
1222
  faq_items:
578
1223
  T::Array[
579
1224
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::FaqItem
580
1225
  ],
1226
+ is_realestate_assistant: T::Boolean,
581
1227
  pending_faq_count: Float
582
1228
  }
583
1229
  )
@@ -585,8 +1231,71 @@ module Revox
585
1231
  def to_hash
586
1232
  end
587
1233
 
588
- # The background sound to play during the call. Useful to give the impression that
589
- # your AI agent is in an office.
1234
+ module AfterCallSMSOutcome
1235
+ extend Revox::Internal::Type::Enum
1236
+
1237
+ TaggedSymbol =
1238
+ T.type_alias do
1239
+ T.all(
1240
+ Symbol,
1241
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome
1242
+ )
1243
+ end
1244
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1245
+
1246
+ NOT_INTERESTED =
1247
+ T.let(
1248
+ :not_interested,
1249
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1250
+ )
1251
+ INTERESTED =
1252
+ T.let(
1253
+ :interested,
1254
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1255
+ )
1256
+ COMPLETED =
1257
+ T.let(
1258
+ :completed,
1259
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1260
+ )
1261
+ REQUESTED_CALLBACK_LATER =
1262
+ T.let(
1263
+ :requested_callback_later,
1264
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1265
+ )
1266
+ REQUESTED_CALLBACK_NEW_NUMBER =
1267
+ T.let(
1268
+ :requested_callback_new_number,
1269
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1270
+ )
1271
+ DO_NOT_CONTACT =
1272
+ T.let(
1273
+ :do_not_contact,
1274
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1275
+ )
1276
+ AI_AVERSE =
1277
+ T.let(
1278
+ :ai_averse,
1279
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1280
+ )
1281
+ NONE =
1282
+ T.let(
1283
+ :none,
1284
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1285
+ )
1286
+
1287
+ sig do
1288
+ override.returns(
1289
+ T::Array[
1290
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::AfterCallSMSOutcome::TaggedSymbol
1291
+ ]
1292
+ )
1293
+ end
1294
+ def self.values
1295
+ end
1296
+ end
1297
+
1298
+ # Ambient background sound to play during the call. null disables it.
590
1299
  module BackgroundSound
591
1300
  extend Revox::Internal::Type::Enum
592
1301
 
@@ -664,6 +1373,24 @@ module Revox
664
1373
  )
665
1374
  end
666
1375
 
1376
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
1377
+ # Monday through Friday.
1378
+ sig do
1379
+ returns(
1380
+ T::Array[
1381
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1382
+ ]
1383
+ )
1384
+ end
1385
+ attr_accessor :allowed_days
1386
+
1387
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
1388
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
1389
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
1390
+ # Default: false.
1391
+ sig { returns(T::Boolean) }
1392
+ attr_accessor :call_twice_in_a_row
1393
+
667
1394
  sig do
668
1395
  returns(
669
1396
  T::Array[
@@ -687,6 +1414,11 @@ module Revox
687
1414
  # iterations. If not provided, defaults will be used.
688
1415
  sig do
689
1416
  params(
1417
+ allowed_days:
1418
+ T::Array[
1419
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::OrSymbol
1420
+ ],
1421
+ call_twice_in_a_row: T::Boolean,
690
1422
  calling_windows:
691
1423
  T::Array[
692
1424
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::CallingWindow::OrHash
@@ -696,6 +1428,14 @@ module Revox
696
1428
  ).returns(T.attached_class)
697
1429
  end
698
1430
  def self.new(
1431
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
1432
+ # Monday through Friday.
1433
+ allowed_days:,
1434
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
1435
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
1436
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
1437
+ # Default: false.
1438
+ call_twice_in_a_row:,
699
1439
  calling_windows:,
700
1440
  # Maximum number of call retry attempts. Default: 3.
701
1441
  max_retry_attempts:,
@@ -709,6 +1449,11 @@ module Revox
709
1449
  sig do
710
1450
  override.returns(
711
1451
  {
1452
+ allowed_days:
1453
+ T::Array[
1454
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1455
+ ],
1456
+ call_twice_in_a_row: T::Boolean,
712
1457
  calling_windows:
713
1458
  T::Array[
714
1459
  Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::CallingWindow
@@ -721,6 +1466,65 @@ module Revox
721
1466
  def to_hash
722
1467
  end
723
1468
 
1469
+ module AllowedDay
1470
+ extend Revox::Internal::Type::Enum
1471
+
1472
+ TaggedSymbol =
1473
+ T.type_alias do
1474
+ T.all(
1475
+ Symbol,
1476
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay
1477
+ )
1478
+ end
1479
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1480
+
1481
+ MONDAY =
1482
+ T.let(
1483
+ :monday,
1484
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1485
+ )
1486
+ TUESDAY =
1487
+ T.let(
1488
+ :tuesday,
1489
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1490
+ )
1491
+ WEDNESDAY =
1492
+ T.let(
1493
+ :wednesday,
1494
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1495
+ )
1496
+ THURSDAY =
1497
+ T.let(
1498
+ :thursday,
1499
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1500
+ )
1501
+ FRIDAY =
1502
+ T.let(
1503
+ :friday,
1504
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1505
+ )
1506
+ SATURDAY =
1507
+ T.let(
1508
+ :saturday,
1509
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1510
+ )
1511
+ SUNDAY =
1512
+ T.let(
1513
+ :sunday,
1514
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1515
+ )
1516
+
1517
+ sig do
1518
+ override.returns(
1519
+ T::Array[
1520
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1521
+ ]
1522
+ )
1523
+ end
1524
+ def self.values
1525
+ end
1526
+ end
1527
+
724
1528
  class CallingWindow < Revox::Internal::Type::BaseModel
725
1529
  OrHash =
726
1530
  T.type_alias do
@@ -781,124 +1585,289 @@ module Revox
781
1585
  end
782
1586
  end
783
1587
 
784
- module FirstSentenceMode
785
- extend Revox::Internal::Type::Enum
786
-
787
- TaggedSymbol =
1588
+ class CustomTool < Revox::Internal::Type::BaseModel
1589
+ OrHash =
788
1590
  T.type_alias do
789
- T.all(
790
- Symbol,
791
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode
1591
+ T.any(
1592
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool,
1593
+ Revox::Internal::AnyHash
792
1594
  )
793
1595
  end
794
- OrSymbol = T.type_alias { T.any(Symbol, String) }
795
1596
 
796
- GENERATED =
797
- T.let(
798
- :generated,
799
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
1597
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
1598
+ # "{{name}}") for dynamic values
1599
+ sig { returns(T.nilable(String)) }
1600
+ attr_accessor :body_template
1601
+
1602
+ # Human-readable description of what the tool does, used by the LLM to decide when
1603
+ # to call it
1604
+ sig { returns(String) }
1605
+ attr_accessor :description
1606
+
1607
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
1608
+ sig do
1609
+ returns(
1610
+ T::Array[
1611
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Header
1612
+ ]
800
1613
  )
801
- STATIC =
802
- T.let(
803
- :static,
804
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
1614
+ end
1615
+ attr_accessor :headers
1616
+
1617
+ # Schema defining the parameters the LLM should extract from the conversation to
1618
+ # pass to this tool
1619
+ sig do
1620
+ returns(
1621
+ T::Array[
1622
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema
1623
+ ]
805
1624
  )
806
- NONE =
807
- T.let(
808
- :none,
809
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
1625
+ end
1626
+ attr_accessor :input_schema
1627
+
1628
+ # HTTP method to use when calling the API endpoint
1629
+ sig do
1630
+ returns(
1631
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
810
1632
  )
1633
+ end
1634
+ attr_accessor :method_
1635
+
1636
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
1637
+ sig { returns(String) }
1638
+ attr_accessor :name
811
1639
 
1640
+ # Query string parameters appended to the URL. Values support {{variable}}
1641
+ # placeholders
812
1642
  sig do
813
- override.returns(
1643
+ returns(
814
1644
  T::Array[
815
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
1645
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::QueryParam
816
1646
  ]
817
1647
  )
818
1648
  end
819
- def self.values
820
- end
821
- end
1649
+ attr_accessor :query_params
822
1650
 
823
- module LlmModel
824
- extend Revox::Internal::Type::Union
1651
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
1652
+ # values
1653
+ sig { returns(String) }
1654
+ attr_accessor :url
825
1655
 
826
- Variants =
827
- T.type_alias do
828
- T.any(
829
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0,
830
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember1
831
- )
832
- end
1656
+ sig do
1657
+ params(
1658
+ body_template: T.nilable(String),
1659
+ description: String,
1660
+ headers:
1661
+ T::Array[
1662
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Header::OrHash
1663
+ ],
1664
+ input_schema:
1665
+ T::Array[
1666
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::OrHash
1667
+ ],
1668
+ method_:
1669
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method::OrSymbol,
1670
+ name: String,
1671
+ query_params:
1672
+ T::Array[
1673
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::QueryParam::OrHash
1674
+ ],
1675
+ url: String
1676
+ ).returns(T.attached_class)
1677
+ end
1678
+ def self.new(
1679
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
1680
+ # "{{name}}") for dynamic values
1681
+ body_template:,
1682
+ # Human-readable description of what the tool does, used by the LLM to decide when
1683
+ # to call it
1684
+ description:,
1685
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
1686
+ headers:,
1687
+ # Schema defining the parameters the LLM should extract from the conversation to
1688
+ # pass to this tool
1689
+ input_schema:,
1690
+ # HTTP method to use when calling the API endpoint
1691
+ method_:,
1692
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
1693
+ name:,
1694
+ # Query string parameters appended to the URL. Values support {{variable}}
1695
+ # placeholders
1696
+ query_params:,
1697
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
1698
+ # values
1699
+ url:
1700
+ )
1701
+ end
833
1702
 
834
- class UnionMember0 < Revox::Internal::Type::BaseModel
1703
+ sig do
1704
+ override.returns(
1705
+ {
1706
+ body_template: T.nilable(String),
1707
+ description: String,
1708
+ headers:
1709
+ T::Array[
1710
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Header
1711
+ ],
1712
+ input_schema:
1713
+ T::Array[
1714
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema
1715
+ ],
1716
+ method_:
1717
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol,
1718
+ name: String,
1719
+ query_params:
1720
+ T::Array[
1721
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::QueryParam
1722
+ ],
1723
+ url: String
1724
+ }
1725
+ )
1726
+ end
1727
+ def to_hash
1728
+ end
1729
+
1730
+ class Header < Revox::Internal::Type::BaseModel
835
1731
  OrHash =
836
1732
  T.type_alias do
837
1733
  T.any(
838
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0,
1734
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Header,
839
1735
  Revox::Internal::AnyHash
840
1736
  )
841
1737
  end
842
1738
 
1739
+ sig { returns(String) }
1740
+ attr_accessor :key
1741
+
1742
+ sig { returns(String) }
1743
+ attr_accessor :value
1744
+
843
1745
  sig do
844
- returns(
845
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
846
- )
1746
+ params(key: String, value: String).returns(T.attached_class)
1747
+ end
1748
+ def self.new(key:, value:)
847
1749
  end
848
- attr_accessor :name
849
1750
 
850
- sig { returns(Symbol) }
851
- attr_accessor :type
1751
+ sig { override.returns({ key: String, value: String }) }
1752
+ def to_hash
1753
+ end
1754
+ end
1755
+
1756
+ class InputSchema < Revox::Internal::Type::BaseModel
1757
+ OrHash =
1758
+ T.type_alias do
1759
+ T.any(
1760
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema,
1761
+ Revox::Internal::AnyHash
1762
+ )
1763
+ end
1764
+
1765
+ sig { returns(String) }
1766
+ attr_accessor :name
1767
+
1768
+ sig { returns(T::Boolean) }
1769
+ attr_accessor :required
1770
+
1771
+ sig do
1772
+ returns(
1773
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1774
+ )
1775
+ end
1776
+ attr_accessor :type
1777
+
1778
+ sig { returns(T.nilable(String)) }
1779
+ attr_reader :description
1780
+
1781
+ sig { params(description: String).void }
1782
+ attr_writer :description
1783
+
1784
+ sig { returns(T.nilable(T::Array[String])) }
1785
+ attr_reader :enum_options
1786
+
1787
+ sig { params(enum_options: T::Array[String]).void }
1788
+ attr_writer :enum_options
852
1789
 
853
1790
  sig do
854
1791
  params(
855
- name:
856
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::OrSymbol,
857
- type: Symbol
1792
+ name: String,
1793
+ required: T::Boolean,
1794
+ type:
1795
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::OrSymbol,
1796
+ description: String,
1797
+ enum_options: T::Array[String]
858
1798
  ).returns(T.attached_class)
859
1799
  end
860
- def self.new(name:, type: :"dedicated-instance")
1800
+ def self.new(
1801
+ name:,
1802
+ required:,
1803
+ type:,
1804
+ description: nil,
1805
+ enum_options: nil
1806
+ )
861
1807
  end
862
1808
 
863
1809
  sig do
864
1810
  override.returns(
865
1811
  {
866
- name:
867
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol,
868
- type: Symbol
1812
+ name: String,
1813
+ required: T::Boolean,
1814
+ type:
1815
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol,
1816
+ description: String,
1817
+ enum_options: T::Array[String]
869
1818
  }
870
1819
  )
871
1820
  end
872
1821
  def to_hash
873
1822
  end
874
1823
 
875
- module Name
1824
+ module Type
876
1825
  extend Revox::Internal::Type::Enum
877
1826
 
878
1827
  TaggedSymbol =
879
1828
  T.type_alias do
880
1829
  T.all(
881
1830
  Symbol,
882
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name
1831
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type
883
1832
  )
884
1833
  end
885
1834
  OrSymbol = T.type_alias { T.any(Symbol, String) }
886
1835
 
887
- GPT_4_1 =
1836
+ STRING =
888
1837
  T.let(
889
- :"gpt-4.1",
890
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1838
+ :string,
1839
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
891
1840
  )
892
- MINISTRAL_3_8B_INSTRUCT =
1841
+ NUMBER =
893
1842
  T.let(
894
- :"ministral-3-8b-instruct",
895
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1843
+ :number,
1844
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1845
+ )
1846
+ BOOLEAN =
1847
+ T.let(
1848
+ :boolean,
1849
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1850
+ )
1851
+ ENUM =
1852
+ T.let(
1853
+ :enum,
1854
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1855
+ )
1856
+ DATE =
1857
+ T.let(
1858
+ :date,
1859
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1860
+ )
1861
+ DATETIME =
1862
+ T.let(
1863
+ :datetime,
1864
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
896
1865
  )
897
1866
 
898
1867
  sig do
899
1868
  override.returns(
900
1869
  T::Array[
901
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1870
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
902
1871
  ]
903
1872
  )
904
1873
  end
@@ -907,183 +1876,1677 @@ module Revox
907
1876
  end
908
1877
  end
909
1878
 
910
- class UnionMember1 < Revox::Internal::Type::BaseModel
1879
+ # HTTP method to use when calling the API endpoint
1880
+ module Method
1881
+ extend Revox::Internal::Type::Enum
1882
+
1883
+ TaggedSymbol =
1884
+ T.type_alias do
1885
+ T.all(
1886
+ Symbol,
1887
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method
1888
+ )
1889
+ end
1890
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1891
+
1892
+ GET =
1893
+ T.let(
1894
+ :GET,
1895
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1896
+ )
1897
+ POST =
1898
+ T.let(
1899
+ :POST,
1900
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1901
+ )
1902
+ PUT =
1903
+ T.let(
1904
+ :PUT,
1905
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1906
+ )
1907
+ PATCH =
1908
+ T.let(
1909
+ :PATCH,
1910
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1911
+ )
1912
+ DELETE =
1913
+ T.let(
1914
+ :DELETE,
1915
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1916
+ )
1917
+
1918
+ sig do
1919
+ override.returns(
1920
+ T::Array[
1921
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::Method::TaggedSymbol
1922
+ ]
1923
+ )
1924
+ end
1925
+ def self.values
1926
+ end
1927
+ end
1928
+
1929
+ class QueryParam < Revox::Internal::Type::BaseModel
911
1930
  OrHash =
912
1931
  T.type_alias do
913
1932
  T.any(
914
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember1,
1933
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CustomTool::QueryParam,
915
1934
  Revox::Internal::AnyHash
916
1935
  )
917
1936
  end
918
1937
 
919
- # The model ID to use from OpenRouter. eg: openai/gpt-4.1
920
1938
  sig { returns(String) }
921
- attr_accessor :openrouter_model_id
1939
+ attr_accessor :key
922
1940
 
923
- # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
924
1941
  sig { returns(String) }
925
- attr_accessor :openrouter_provider
926
-
927
- # Use a model from OpenRouter.
928
- sig { returns(Symbol) }
929
- attr_accessor :type
1942
+ attr_accessor :value
930
1943
 
931
1944
  sig do
932
- params(
933
- openrouter_model_id: String,
934
- openrouter_provider: String,
935
- type: Symbol
936
- ).returns(T.attached_class)
1945
+ params(key: String, value: String).returns(T.attached_class)
937
1946
  end
938
- def self.new(
939
- # The model ID to use from OpenRouter. eg: openai/gpt-4.1
940
- openrouter_model_id:,
941
- # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
942
- openrouter_provider:,
943
- # Use a model from OpenRouter.
944
- type: :openrouter
945
- )
1947
+ def self.new(key:, value:)
946
1948
  end
947
1949
 
948
- sig do
949
- override.returns(
950
- {
951
- openrouter_model_id: String,
952
- openrouter_provider: String,
953
- type: Symbol
954
- }
955
- )
956
- end
1950
+ sig { override.returns({ key: String, value: String }) }
957
1951
  def to_hash
958
1952
  end
959
1953
  end
1954
+ end
1955
+
1956
+ # The language used for the notification email content. One of "en" or "fr".
1957
+ module EmailNotificationLanguage
1958
+ extend Revox::Internal::Type::Enum
1959
+
1960
+ TaggedSymbol =
1961
+ T.type_alias do
1962
+ T.all(
1963
+ Symbol,
1964
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationLanguage
1965
+ )
1966
+ end
1967
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1968
+
1969
+ EN =
1970
+ T.let(
1971
+ :en,
1972
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1973
+ )
1974
+ FR =
1975
+ T.let(
1976
+ :fr,
1977
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
1978
+ )
960
1979
 
961
1980
  sig do
962
1981
  override.returns(
963
1982
  T::Array[
964
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::Variants
1983
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationLanguage::TaggedSymbol
965
1984
  ]
966
1985
  )
967
1986
  end
968
- def self.variants
1987
+ def self.values
969
1988
  end
970
1989
  end
971
1990
 
972
- class StructuredOutputConfig < Revox::Internal::Type::BaseModel
973
- OrHash =
1991
+ module EmailNotificationOutcome
1992
+ extend Revox::Internal::Type::Enum
1993
+
1994
+ TaggedSymbol =
974
1995
  T.type_alias do
975
- T.any(
976
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig,
977
- Revox::Internal::AnyHash
1996
+ T.all(
1997
+ Symbol,
1998
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome
978
1999
  )
979
2000
  end
2001
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
980
2002
 
981
- sig { returns(String) }
982
- attr_accessor :name
983
-
984
- sig { returns(T::Boolean) }
985
- attr_accessor :required
2003
+ NOT_INTERESTED =
2004
+ T.let(
2005
+ :not_interested,
2006
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2007
+ )
2008
+ INTERESTED =
2009
+ T.let(
2010
+ :interested,
2011
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2012
+ )
2013
+ COMPLETED =
2014
+ T.let(
2015
+ :completed,
2016
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2017
+ )
2018
+ REQUESTED_CALLBACK_LATER =
2019
+ T.let(
2020
+ :requested_callback_later,
2021
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2022
+ )
2023
+ REQUESTED_CALLBACK_NEW_NUMBER =
2024
+ T.let(
2025
+ :requested_callback_new_number,
2026
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2027
+ )
2028
+ DO_NOT_CONTACT =
2029
+ T.let(
2030
+ :do_not_contact,
2031
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2032
+ )
2033
+ AI_AVERSE =
2034
+ T.let(
2035
+ :ai_averse,
2036
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2037
+ )
2038
+ NONE =
2039
+ T.let(
2040
+ :none,
2041
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2042
+ )
986
2043
 
987
2044
  sig do
988
- returns(
989
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2045
+ override.returns(
2046
+ T::Array[
2047
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::EmailNotificationOutcome::TaggedSymbol
2048
+ ]
990
2049
  )
991
2050
  end
992
- attr_accessor :type
993
-
994
- sig { returns(T.nilable(String)) }
995
- attr_reader :description
2051
+ def self.values
2052
+ end
2053
+ end
996
2054
 
997
- sig { params(description: String).void }
998
- attr_writer :description
2055
+ module FirstSentenceMode
2056
+ extend Revox::Internal::Type::Enum
999
2057
 
1000
- sig { returns(T.nilable(T::Array[String])) }
1001
- attr_reader :enum_options
2058
+ TaggedSymbol =
2059
+ T.type_alias do
2060
+ T.all(
2061
+ Symbol,
2062
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode
2063
+ )
2064
+ end
2065
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1002
2066
 
1003
- sig { params(enum_options: T::Array[String]).void }
1004
- attr_writer :enum_options
2067
+ GENERATED =
2068
+ T.let(
2069
+ :generated,
2070
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
2071
+ )
2072
+ STATIC =
2073
+ T.let(
2074
+ :static,
2075
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
2076
+ )
2077
+ NONE =
2078
+ T.let(
2079
+ :none,
2080
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
2081
+ )
1005
2082
 
1006
2083
  sig do
1007
- params(
1008
- name: String,
1009
- required: T::Boolean,
1010
- type:
1011
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::OrSymbol,
1012
- description: String,
1013
- enum_options: T::Array[String]
1014
- ).returns(T.attached_class)
2084
+ override.returns(
2085
+ T::Array[
2086
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::FirstSentenceMode::TaggedSymbol
2087
+ ]
2088
+ )
1015
2089
  end
1016
- def self.new(
1017
- name:,
1018
- required:,
1019
- type:,
1020
- description: nil,
1021
- enum_options: nil
1022
- )
2090
+ def self.values
1023
2091
  end
2092
+ end
2093
+
2094
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
2095
+ # not configured.
2096
+ module HumanTransferMode
2097
+ extend Revox::Internal::Type::Enum
2098
+
2099
+ TaggedSymbol =
2100
+ T.type_alias do
2101
+ T.all(
2102
+ Symbol,
2103
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::HumanTransferMode
2104
+ )
2105
+ end
2106
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2107
+
2108
+ WARM =
2109
+ T.let(
2110
+ :warm,
2111
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
2112
+ )
2113
+ COLD =
2114
+ T.let(
2115
+ :cold,
2116
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
2117
+ )
1024
2118
 
1025
2119
  sig do
1026
2120
  override.returns(
1027
- {
1028
- name: String,
1029
- required: T::Boolean,
1030
- type:
1031
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol,
1032
- description: String,
1033
- enum_options: T::Array[String]
1034
- }
2121
+ T::Array[
2122
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::HumanTransferMode::TaggedSymbol
2123
+ ]
2124
+ )
2125
+ end
2126
+ def self.values
2127
+ end
2128
+ end
2129
+
2130
+ module LlmModel
2131
+ extend Revox::Internal::Type::Union
2132
+
2133
+ Variants =
2134
+ T.type_alias do
2135
+ T.any(
2136
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0,
2137
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember1,
2138
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember2,
2139
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3
2140
+ )
2141
+ end
2142
+
2143
+ class UnionMember0 < Revox::Internal::Type::BaseModel
2144
+ OrHash =
2145
+ T.type_alias do
2146
+ T.any(
2147
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0,
2148
+ Revox::Internal::AnyHash
2149
+ )
2150
+ end
2151
+
2152
+ sig do
2153
+ returns(
2154
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
2155
+ )
2156
+ end
2157
+ attr_accessor :name
2158
+
2159
+ sig { returns(Symbol) }
2160
+ attr_accessor :type
2161
+
2162
+ sig do
2163
+ params(
2164
+ name:
2165
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::OrSymbol,
2166
+ type: Symbol
2167
+ ).returns(T.attached_class)
2168
+ end
2169
+ def self.new(name:, type: :"dedicated-instance")
2170
+ end
2171
+
2172
+ sig do
2173
+ override.returns(
2174
+ {
2175
+ name:
2176
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol,
2177
+ type: Symbol
2178
+ }
2179
+ )
2180
+ end
2181
+ def to_hash
2182
+ end
2183
+
2184
+ module Name
2185
+ extend Revox::Internal::Type::Enum
2186
+
2187
+ TaggedSymbol =
2188
+ T.type_alias do
2189
+ T.all(
2190
+ Symbol,
2191
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name
2192
+ )
2193
+ end
2194
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2195
+
2196
+ GPT_4_1 =
2197
+ T.let(
2198
+ :"gpt-4.1",
2199
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
2200
+ )
2201
+ MINISTRAL_3_8B_INSTRUCT =
2202
+ T.let(
2203
+ :"ministral-3-8b-instruct",
2204
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
2205
+ )
2206
+
2207
+ sig do
2208
+ override.returns(
2209
+ T::Array[
2210
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
2211
+ ]
2212
+ )
2213
+ end
2214
+ def self.values
2215
+ end
2216
+ end
2217
+ end
2218
+
2219
+ class UnionMember1 < Revox::Internal::Type::BaseModel
2220
+ OrHash =
2221
+ T.type_alias do
2222
+ T.any(
2223
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember1,
2224
+ Revox::Internal::AnyHash
2225
+ )
2226
+ end
2227
+
2228
+ # The model ID to use from OpenRouter. eg: openai/gpt-4.1
2229
+ sig { returns(String) }
2230
+ attr_accessor :openrouter_model_id
2231
+
2232
+ # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
2233
+ sig { returns(String) }
2234
+ attr_accessor :openrouter_provider
2235
+
2236
+ # Use a model from OpenRouter.
2237
+ sig { returns(Symbol) }
2238
+ attr_accessor :type
2239
+
2240
+ sig do
2241
+ params(
2242
+ openrouter_model_id: String,
2243
+ openrouter_provider: String,
2244
+ type: Symbol
2245
+ ).returns(T.attached_class)
2246
+ end
2247
+ def self.new(
2248
+ # The model ID to use from OpenRouter. eg: openai/gpt-4.1
2249
+ openrouter_model_id:,
2250
+ # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
2251
+ openrouter_provider:,
2252
+ # Use a model from OpenRouter.
2253
+ type: :openrouter
2254
+ )
2255
+ end
2256
+
2257
+ sig do
2258
+ override.returns(
2259
+ {
2260
+ openrouter_model_id: String,
2261
+ openrouter_provider: String,
2262
+ type: Symbol
2263
+ }
2264
+ )
2265
+ end
2266
+ def to_hash
2267
+ end
2268
+ end
2269
+
2270
+ class UnionMember2 < Revox::Internal::Type::BaseModel
2271
+ OrHash =
2272
+ T.type_alias do
2273
+ T.any(
2274
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember2,
2275
+ Revox::Internal::AnyHash
2276
+ )
2277
+ end
2278
+
2279
+ # API key sent as Bearer token to the custom endpoint.
2280
+ sig { returns(String) }
2281
+ attr_accessor :api_key
2282
+
2283
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
2284
+ sig { returns(String) }
2285
+ attr_accessor :api_url
2286
+
2287
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
2288
+ sig { returns(String) }
2289
+ attr_accessor :model_name
2290
+
2291
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
2292
+ sig { returns(Symbol) }
2293
+ attr_accessor :type
2294
+
2295
+ sig do
2296
+ params(
2297
+ api_key: String,
2298
+ api_url: String,
2299
+ model_name: String,
2300
+ type: Symbol
2301
+ ).returns(T.attached_class)
2302
+ end
2303
+ def self.new(
2304
+ # API key sent as Bearer token to the custom endpoint.
2305
+ api_key:,
2306
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
2307
+ api_url:,
2308
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
2309
+ model_name:,
2310
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
2311
+ type: :custom
2312
+ )
2313
+ end
2314
+
2315
+ sig do
2316
+ override.returns(
2317
+ {
2318
+ api_key: String,
2319
+ api_url: String,
2320
+ model_name: String,
2321
+ type: Symbol
2322
+ }
2323
+ )
2324
+ end
2325
+ def to_hash
2326
+ end
2327
+ end
2328
+
2329
+ class UnionMember3 < Revox::Internal::Type::BaseModel
2330
+ OrHash =
2331
+ T.type_alias do
2332
+ T.any(
2333
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3,
2334
+ Revox::Internal::AnyHash
2335
+ )
2336
+ end
2337
+
2338
+ # The provider to use from Realtime. eg: openai, google.
2339
+ sig do
2340
+ returns(
2341
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2342
+ )
2343
+ end
2344
+ attr_accessor :provider
2345
+
2346
+ # The model ID to use from Realtime. eg: gpt-4.1
2347
+ sig { returns(String) }
2348
+ attr_accessor :realtime_model_id
2349
+
2350
+ # Use a model from Realtime.
2351
+ sig { returns(Symbol) }
2352
+ attr_accessor :type
2353
+
2354
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
2355
+ sig { returns(T.nilable(String)) }
2356
+ attr_reader :realtime_voice_id
2357
+
2358
+ sig { params(realtime_voice_id: String).void }
2359
+ attr_writer :realtime_voice_id
2360
+
2361
+ sig do
2362
+ params(
2363
+ provider:
2364
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::OrSymbol,
2365
+ realtime_model_id: String,
2366
+ realtime_voice_id: String,
2367
+ type: Symbol
2368
+ ).returns(T.attached_class)
2369
+ end
2370
+ def self.new(
2371
+ # The provider to use from Realtime. eg: openai, google.
2372
+ provider:,
2373
+ # The model ID to use from Realtime. eg: gpt-4.1
2374
+ realtime_model_id:,
2375
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
2376
+ realtime_voice_id: nil,
2377
+ # Use a model from Realtime.
2378
+ type: :realtime
2379
+ )
2380
+ end
2381
+
2382
+ sig do
2383
+ override.returns(
2384
+ {
2385
+ provider:
2386
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol,
2387
+ realtime_model_id: String,
2388
+ type: Symbol,
2389
+ realtime_voice_id: String
2390
+ }
2391
+ )
2392
+ end
2393
+ def to_hash
2394
+ end
2395
+
2396
+ # The provider to use from Realtime. eg: openai, google.
2397
+ module Provider
2398
+ extend Revox::Internal::Type::Enum
2399
+
2400
+ TaggedSymbol =
2401
+ T.type_alias do
2402
+ T.all(
2403
+ Symbol,
2404
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider
2405
+ )
2406
+ end
2407
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2408
+
2409
+ OPENAI =
2410
+ T.let(
2411
+ :openai,
2412
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2413
+ )
2414
+ GOOGLE =
2415
+ T.let(
2416
+ :google,
2417
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2418
+ )
2419
+
2420
+ sig do
2421
+ override.returns(
2422
+ T::Array[
2423
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2424
+ ]
2425
+ )
2426
+ end
2427
+ def self.values
2428
+ end
2429
+ end
2430
+ end
2431
+
2432
+ sig do
2433
+ override.returns(
2434
+ T::Array[
2435
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::LlmModel::Variants
2436
+ ]
2437
+ )
2438
+ end
2439
+ def self.variants
2440
+ end
2441
+ end
2442
+
2443
+ class Position < Revox::Internal::Type::BaseModel
2444
+ OrHash =
2445
+ T.type_alias do
2446
+ T.any(
2447
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Position,
2448
+ Revox::Internal::AnyHash
2449
+ )
2450
+ end
2451
+
2452
+ sig { returns(Float) }
2453
+ attr_accessor :x
2454
+
2455
+ sig { returns(Float) }
2456
+ attr_accessor :y_
2457
+
2458
+ sig { params(x: Float, y_: Float).returns(T.attached_class) }
2459
+ def self.new(x:, y_:)
2460
+ end
2461
+
2462
+ sig { override.returns({ x: Float, y_: Float }) }
2463
+ def to_hash
2464
+ end
2465
+ end
2466
+
2467
+ class PromptFlow < Revox::Internal::Type::BaseModel
2468
+ OrHash =
2469
+ T.type_alias do
2470
+ T.any(
2471
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow,
2472
+ Revox::Internal::AnyHash
2473
+ )
2474
+ end
2475
+
2476
+ sig do
2477
+ returns(
2478
+ T::Array[
2479
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Edge
2480
+ ]
2481
+ )
2482
+ end
2483
+ attr_accessor :edges
2484
+
2485
+ sig do
2486
+ returns(
2487
+ T::Array[
2488
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node
2489
+ ]
2490
+ )
2491
+ end
2492
+ attr_accessor :nodes
2493
+
2494
+ sig do
2495
+ params(
2496
+ edges:
2497
+ T::Array[
2498
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Edge::OrHash
2499
+ ],
2500
+ nodes:
2501
+ T::Array[
2502
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::OrHash
2503
+ ]
2504
+ ).returns(T.attached_class)
2505
+ end
2506
+ def self.new(edges:, nodes:)
2507
+ end
2508
+
2509
+ sig do
2510
+ override.returns(
2511
+ {
2512
+ edges:
2513
+ T::Array[
2514
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Edge
2515
+ ],
2516
+ nodes:
2517
+ T::Array[
2518
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node
2519
+ ]
2520
+ }
2521
+ )
2522
+ end
2523
+ def to_hash
2524
+ end
2525
+
2526
+ class Edge < Revox::Internal::Type::BaseModel
2527
+ OrHash =
2528
+ T.type_alias do
2529
+ T.any(
2530
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Edge,
2531
+ Revox::Internal::AnyHash
2532
+ )
2533
+ end
2534
+
2535
+ sig { returns(String) }
2536
+ attr_accessor :id
2537
+
2538
+ sig { returns(String) }
2539
+ attr_accessor :source
2540
+
2541
+ sig { returns(String) }
2542
+ attr_accessor :target
2543
+
2544
+ sig do
2545
+ params(id: String, source: String, target: String).returns(
2546
+ T.attached_class
2547
+ )
2548
+ end
2549
+ def self.new(id:, source:, target:)
2550
+ end
2551
+
2552
+ sig do
2553
+ override.returns({ id: String, source: String, target: String })
2554
+ end
2555
+ def to_hash
2556
+ end
2557
+ end
2558
+
2559
+ class Node < Revox::Internal::Type::BaseModel
2560
+ OrHash =
2561
+ T.type_alias do
2562
+ T.any(
2563
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node,
2564
+ Revox::Internal::AnyHash
2565
+ )
2566
+ end
2567
+
2568
+ sig { returns(String) }
2569
+ attr_accessor :id
2570
+
2571
+ sig do
2572
+ returns(
2573
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Data
2574
+ )
2575
+ end
2576
+ attr_reader :data
2577
+
2578
+ sig do
2579
+ params(
2580
+ data:
2581
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Data::OrHash
2582
+ ).void
2583
+ end
2584
+ attr_writer :data
2585
+
2586
+ sig do
2587
+ returns(
2588
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Position
2589
+ )
2590
+ end
2591
+ attr_reader :position
2592
+
2593
+ sig do
2594
+ params(
2595
+ position:
2596
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Position::OrHash
2597
+ ).void
2598
+ end
2599
+ attr_writer :position
2600
+
2601
+ sig { returns(Symbol) }
2602
+ attr_accessor :type
2603
+
2604
+ sig do
2605
+ params(
2606
+ id: String,
2607
+ data:
2608
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Data::OrHash,
2609
+ position:
2610
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Position::OrHash,
2611
+ type: Symbol
2612
+ ).returns(T.attached_class)
2613
+ end
2614
+ def self.new(id:, data:, position:, type: :promptBlock)
2615
+ end
2616
+
2617
+ sig do
2618
+ override.returns(
2619
+ {
2620
+ id: String,
2621
+ data:
2622
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Data,
2623
+ position:
2624
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Position,
2625
+ type: Symbol
2626
+ }
2627
+ )
2628
+ end
2629
+ def to_hash
2630
+ end
2631
+
2632
+ class Data < Revox::Internal::Type::BaseModel
2633
+ OrHash =
2634
+ T.type_alias do
2635
+ T.any(
2636
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Data,
2637
+ Revox::Internal::AnyHash
2638
+ )
2639
+ end
2640
+
2641
+ sig { returns(String) }
2642
+ attr_accessor :body
2643
+
2644
+ sig { returns(String) }
2645
+ attr_accessor :title
2646
+
2647
+ sig do
2648
+ params(body: String, title: String).returns(T.attached_class)
2649
+ end
2650
+ def self.new(body:, title:)
2651
+ end
2652
+
2653
+ sig { override.returns({ body: String, title: String }) }
2654
+ def to_hash
2655
+ end
2656
+ end
2657
+
2658
+ class Position < Revox::Internal::Type::BaseModel
2659
+ OrHash =
2660
+ T.type_alias do
2661
+ T.any(
2662
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::PromptFlow::Node::Position,
2663
+ Revox::Internal::AnyHash
2664
+ )
2665
+ end
2666
+
2667
+ sig { returns(Float) }
2668
+ attr_accessor :x
2669
+
2670
+ sig { returns(Float) }
2671
+ attr_accessor :y_
2672
+
2673
+ sig { params(x: Float, y_: Float).returns(T.attached_class) }
2674
+ def self.new(x:, y_:)
2675
+ end
2676
+
2677
+ sig { override.returns({ x: Float, y_: Float }) }
2678
+ def to_hash
2679
+ end
2680
+ end
2681
+ end
2682
+ end
2683
+
2684
+ class Slack < Revox::Internal::Type::BaseModel
2685
+ OrHash =
2686
+ T.type_alias do
2687
+ T.any(
2688
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack,
2689
+ Revox::Internal::AnyHash
2690
+ )
2691
+ end
2692
+
2693
+ # The Slack channel ID where the notification will be posted.
2694
+ sig { returns(String) }
2695
+ attr_accessor :channel_id
2696
+
2697
+ # The Nango connection ID linking the org's Slack workspace to Revox.
2698
+ sig { returns(String) }
2699
+ attr_accessor :connection_id
2700
+
2701
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2702
+ # Use 'none' to notify when outcome is null.
2703
+ sig do
2704
+ returns(
2705
+ T::Array[
2706
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2707
+ ]
2708
+ )
2709
+ end
2710
+ attr_accessor :outcomes
2711
+
2712
+ # Human-readable Slack channel name, cached for display in the UI.
2713
+ sig { returns(T.nilable(String)) }
2714
+ attr_accessor :channel_name
2715
+
2716
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2717
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2718
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2719
+ # prompt_variables and structured_output keys. When null/empty a default template
2720
+ # is used.
2721
+ sig { returns(T.nilable(String)) }
2722
+ attr_accessor :template
2723
+
2724
+ sig do
2725
+ params(
2726
+ channel_id: String,
2727
+ connection_id: String,
2728
+ outcomes:
2729
+ T::Array[
2730
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::OrSymbol
2731
+ ],
2732
+ channel_name: T.nilable(String),
2733
+ template: T.nilable(String)
2734
+ ).returns(T.attached_class)
2735
+ end
2736
+ def self.new(
2737
+ # The Slack channel ID where the notification will be posted.
2738
+ channel_id:,
2739
+ # The Nango connection ID linking the org's Slack workspace to Revox.
2740
+ connection_id:,
2741
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2742
+ # Use 'none' to notify when outcome is null.
2743
+ outcomes:,
2744
+ # Human-readable Slack channel name, cached for display in the UI.
2745
+ channel_name: nil,
2746
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2747
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2748
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2749
+ # prompt_variables and structured_output keys. When null/empty a default template
2750
+ # is used.
2751
+ template: nil
2752
+ )
2753
+ end
2754
+
2755
+ sig do
2756
+ override.returns(
2757
+ {
2758
+ channel_id: String,
2759
+ connection_id: String,
2760
+ outcomes:
2761
+ T::Array[
2762
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2763
+ ],
2764
+ channel_name: T.nilable(String),
2765
+ template: T.nilable(String)
2766
+ }
2767
+ )
2768
+ end
2769
+ def to_hash
2770
+ end
2771
+
2772
+ module Outcome
2773
+ extend Revox::Internal::Type::Enum
2774
+
2775
+ TaggedSymbol =
2776
+ T.type_alias do
2777
+ T.all(
2778
+ Symbol,
2779
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome
2780
+ )
2781
+ end
2782
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2783
+
2784
+ NOT_INTERESTED =
2785
+ T.let(
2786
+ :not_interested,
2787
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2788
+ )
2789
+ INTERESTED =
2790
+ T.let(
2791
+ :interested,
2792
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2793
+ )
2794
+ COMPLETED =
2795
+ T.let(
2796
+ :completed,
2797
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2798
+ )
2799
+ REQUESTED_CALLBACK_LATER =
2800
+ T.let(
2801
+ :requested_callback_later,
2802
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2803
+ )
2804
+ REQUESTED_CALLBACK_NEW_NUMBER =
2805
+ T.let(
2806
+ :requested_callback_new_number,
2807
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2808
+ )
2809
+ DO_NOT_CONTACT =
2810
+ T.let(
2811
+ :do_not_contact,
2812
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2813
+ )
2814
+ AI_AVERSE =
2815
+ T.let(
2816
+ :ai_averse,
2817
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2818
+ )
2819
+ NONE =
2820
+ T.let(
2821
+ :none,
2822
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2823
+ )
2824
+
2825
+ sig do
2826
+ override.returns(
2827
+ T::Array[
2828
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Slack::Outcome::TaggedSymbol
2829
+ ]
2830
+ )
2831
+ end
2832
+ def self.values
2833
+ end
2834
+ end
2835
+ end
2836
+
2837
+ class StructuredOutputConfig < Revox::Internal::Type::BaseModel
2838
+ OrHash =
2839
+ T.type_alias do
2840
+ T.any(
2841
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig,
2842
+ Revox::Internal::AnyHash
2843
+ )
2844
+ end
2845
+
2846
+ sig { returns(String) }
2847
+ attr_accessor :name
2848
+
2849
+ sig { returns(T::Boolean) }
2850
+ attr_accessor :required
2851
+
2852
+ sig do
2853
+ returns(
2854
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2855
+ )
2856
+ end
2857
+ attr_accessor :type
2858
+
2859
+ sig { returns(T.nilable(String)) }
2860
+ attr_reader :description
2861
+
2862
+ sig { params(description: String).void }
2863
+ attr_writer :description
2864
+
2865
+ sig { returns(T.nilable(T::Array[String])) }
2866
+ attr_reader :enum_options
2867
+
2868
+ sig { params(enum_options: T::Array[String]).void }
2869
+ attr_writer :enum_options
2870
+
2871
+ sig do
2872
+ params(
2873
+ name: String,
2874
+ required: T::Boolean,
2875
+ type:
2876
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::OrSymbol,
2877
+ description: String,
2878
+ enum_options: T::Array[String]
2879
+ ).returns(T.attached_class)
2880
+ end
2881
+ def self.new(
2882
+ name:,
2883
+ required:,
2884
+ type:,
2885
+ description: nil,
2886
+ enum_options: nil
2887
+ )
2888
+ end
2889
+
2890
+ sig do
2891
+ override.returns(
2892
+ {
2893
+ name: String,
2894
+ required: T::Boolean,
2895
+ type:
2896
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol,
2897
+ description: String,
2898
+ enum_options: T::Array[String]
2899
+ }
2900
+ )
2901
+ end
2902
+ def to_hash
2903
+ end
2904
+
2905
+ module Type
2906
+ extend Revox::Internal::Type::Enum
2907
+
2908
+ TaggedSymbol =
2909
+ T.type_alias do
2910
+ T.all(
2911
+ Symbol,
2912
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type
2913
+ )
2914
+ end
2915
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2916
+
2917
+ STRING =
2918
+ T.let(
2919
+ :string,
2920
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2921
+ )
2922
+ NUMBER =
2923
+ T.let(
2924
+ :number,
2925
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2926
+ )
2927
+ BOOLEAN =
2928
+ T.let(
2929
+ :boolean,
2930
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2931
+ )
2932
+ ENUM =
2933
+ T.let(
2934
+ :enum,
2935
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2936
+ )
2937
+ DATE =
2938
+ T.let(
2939
+ :date,
2940
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2941
+ )
2942
+ DATETIME =
2943
+ T.let(
2944
+ :datetime,
2945
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2946
+ )
2947
+
2948
+ sig do
2949
+ override.returns(
2950
+ T::Array[
2951
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2952
+ ]
2953
+ )
2954
+ end
2955
+ def self.values
2956
+ end
2957
+ end
2958
+ end
2959
+
2960
+ class SttContext < Revox::Internal::Type::BaseModel
2961
+ OrHash =
2962
+ T.type_alias do
2963
+ T.any(
2964
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttContext,
2965
+ Revox::Internal::AnyHash
2966
+ )
2967
+ end
2968
+
2969
+ sig do
2970
+ returns(
2971
+ T::Array[
2972
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttContext::General
2973
+ ]
2974
+ )
2975
+ end
2976
+ attr_accessor :general
2977
+
2978
+ sig { returns(T::Array[String]) }
2979
+ attr_accessor :terms
2980
+
2981
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
2982
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
2983
+ # replacing existing entries.
2984
+ sig do
2985
+ params(
2986
+ general:
2987
+ T::Array[
2988
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttContext::General::OrHash
2989
+ ],
2990
+ terms: T::Array[String]
2991
+ ).returns(T.attached_class)
2992
+ end
2993
+ def self.new(general:, terms:)
2994
+ end
2995
+
2996
+ sig do
2997
+ override.returns(
2998
+ {
2999
+ general:
3000
+ T::Array[
3001
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttContext::General
3002
+ ],
3003
+ terms: T::Array[String]
3004
+ }
3005
+ )
3006
+ end
3007
+ def to_hash
3008
+ end
3009
+
3010
+ class General < Revox::Internal::Type::BaseModel
3011
+ OrHash =
3012
+ T.type_alias do
3013
+ T.any(
3014
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttContext::General,
3015
+ Revox::Internal::AnyHash
3016
+ )
3017
+ end
3018
+
3019
+ sig { returns(String) }
3020
+ attr_accessor :key
3021
+
3022
+ sig { returns(String) }
3023
+ attr_accessor :value
3024
+
3025
+ sig do
3026
+ params(key: String, value: String).returns(T.attached_class)
3027
+ end
3028
+ def self.new(key:, value:)
3029
+ end
3030
+
3031
+ sig { override.returns({ key: String, value: String }) }
3032
+ def to_hash
3033
+ end
3034
+ end
3035
+ end
3036
+
3037
+ # Transcriber (speech-to-text) model used for the assistant.
3038
+ module SttModel
3039
+ extend Revox::Internal::Type::Enum
3040
+
3041
+ TaggedSymbol =
3042
+ T.type_alias do
3043
+ T.all(
3044
+ Symbol,
3045
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttModel
3046
+ )
3047
+ end
3048
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3049
+
3050
+ STT_RT_V4 =
3051
+ T.let(
3052
+ :"stt-rt-v4",
3053
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttModel::TaggedSymbol
3054
+ )
3055
+ STT_RT_V5 =
3056
+ T.let(
3057
+ :"stt-rt-v5",
3058
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttModel::TaggedSymbol
3059
+ )
3060
+
3061
+ sig do
3062
+ override.returns(
3063
+ T::Array[
3064
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::SttModel::TaggedSymbol
3065
+ ]
3066
+ )
3067
+ end
3068
+ def self.values
3069
+ end
3070
+ end
3071
+
3072
+ # Audio clip to play while the agent is processing a response. One of the built-in
3073
+ # LiveKit audio clips; null disables it.
3074
+ module ThinkingSound
3075
+ extend Revox::Internal::Type::Enum
3076
+
3077
+ TaggedSymbol =
3078
+ T.type_alias do
3079
+ T.all(
3080
+ Symbol,
3081
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound
3082
+ )
3083
+ end
3084
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3085
+
3086
+ CITY_AMBIENCE_OGG =
3087
+ T.let(
3088
+ :"city-ambience.ogg",
3089
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3090
+ )
3091
+ FOREST_AMBIENCE_OGG =
3092
+ T.let(
3093
+ :"forest-ambience.ogg",
3094
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3095
+ )
3096
+ OFFICE_AMBIENCE_OGG =
3097
+ T.let(
3098
+ :"office-ambience.ogg",
3099
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3100
+ )
3101
+ CROWDED_ROOM_OGG =
3102
+ T.let(
3103
+ :"crowded-room.ogg",
3104
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3105
+ )
3106
+ KEYBOARD_TYPING_OGG =
3107
+ T.let(
3108
+ :"keyboard-typing.ogg",
3109
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3110
+ )
3111
+ KEYBOARD_TYPING2_OGG =
3112
+ T.let(
3113
+ :"keyboard-typing2.ogg",
3114
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3115
+ )
3116
+ HOLD_MUSIC_OGG =
3117
+ T.let(
3118
+ :"hold_music.ogg",
3119
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3120
+ )
3121
+
3122
+ sig do
3123
+ override.returns(
3124
+ T::Array[
3125
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::ThinkingSound::TaggedSymbol
3126
+ ]
3127
+ )
3128
+ end
3129
+ def self.values
3130
+ end
3131
+ end
3132
+
3133
+ module Type
3134
+ extend Revox::Internal::Type::Enum
3135
+
3136
+ TaggedSymbol =
3137
+ T.type_alias do
3138
+ T.all(
3139
+ Symbol,
3140
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Type
3141
+ )
3142
+ end
3143
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3144
+
3145
+ STANDALONE =
3146
+ T.let(
3147
+ :standalone,
3148
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Type::TaggedSymbol
3149
+ )
3150
+ MULTI_STEP =
3151
+ T.let(
3152
+ :"multi-step",
3153
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Type::TaggedSymbol
3154
+ )
3155
+ SUB_ASSISTANT =
3156
+ T.let(
3157
+ :"sub-assistant",
3158
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Type::TaggedSymbol
3159
+ )
3160
+
3161
+ sig do
3162
+ override.returns(
3163
+ T::Array[
3164
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Type::TaggedSymbol
3165
+ ]
3166
+ )
3167
+ end
3168
+ def self.values
3169
+ end
3170
+ end
3171
+
3172
+ class Voice < Revox::Internal::Type::BaseModel
3173
+ OrHash =
3174
+ T.type_alias do
3175
+ T.any(
3176
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice,
3177
+ Revox::Internal::AnyHash
3178
+ )
3179
+ end
3180
+
3181
+ # The ID of the voice.
3182
+ sig { returns(String) }
3183
+ attr_accessor :id
3184
+
3185
+ # The provider of the voice.
3186
+ sig do
3187
+ returns(
3188
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3189
+ )
3190
+ end
3191
+ attr_accessor :provider
3192
+
3193
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
3194
+ # for other providers.
3195
+ sig do
3196
+ returns(
3197
+ T.nilable(
3198
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Model::TaggedSymbol
3199
+ )
3200
+ )
3201
+ end
3202
+ attr_reader :model
3203
+
3204
+ sig do
3205
+ params(
3206
+ model:
3207
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Model::OrSymbol
3208
+ ).void
3209
+ end
3210
+ attr_writer :model
3211
+
3212
+ # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3213
+ # 0.7–1.2. Default is 1.0.
3214
+ sig { returns(T.nilable(Float)) }
3215
+ attr_reader :speed
3216
+
3217
+ sig { params(speed: Float).void }
3218
+ attr_writer :speed
3219
+
3220
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
3221
+ # providers.
3222
+ sig { returns(T.nilable(Float)) }
3223
+ attr_reader :volume
3224
+
3225
+ sig { params(volume: Float).void }
3226
+ attr_writer :volume
3227
+
3228
+ sig do
3229
+ params(
3230
+ id: String,
3231
+ provider:
3232
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::OrSymbol,
3233
+ model:
3234
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Model::OrSymbol,
3235
+ speed: Float,
3236
+ volume: Float
3237
+ ).returns(T.attached_class)
3238
+ end
3239
+ def self.new(
3240
+ # The ID of the voice.
3241
+ id:,
3242
+ # The provider of the voice.
3243
+ provider:,
3244
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
3245
+ # for other providers.
3246
+ model: nil,
3247
+ # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3248
+ # 0.7–1.2. Default is 1.0.
3249
+ speed: nil,
3250
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
3251
+ # providers.
3252
+ volume: nil
3253
+ )
3254
+ end
3255
+
3256
+ sig do
3257
+ override.returns(
3258
+ {
3259
+ id: String,
3260
+ provider:
3261
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol,
3262
+ model:
3263
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Model::TaggedSymbol,
3264
+ speed: Float,
3265
+ volume: Float
3266
+ }
3267
+ )
3268
+ end
3269
+ def to_hash
3270
+ end
3271
+
3272
+ # The provider of the voice.
3273
+ module Provider
3274
+ extend Revox::Internal::Type::Enum
3275
+
3276
+ TaggedSymbol =
3277
+ T.type_alias do
3278
+ T.all(
3279
+ Symbol,
3280
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider
3281
+ )
3282
+ end
3283
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3284
+
3285
+ CARTESIA =
3286
+ T.let(
3287
+ :cartesia,
3288
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3289
+ )
3290
+ ELEVENLABS =
3291
+ T.let(
3292
+ :elevenlabs,
3293
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3294
+ )
3295
+
3296
+ sig do
3297
+ override.returns(
3298
+ T::Array[
3299
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
3300
+ ]
3301
+ )
3302
+ end
3303
+ def self.values
3304
+ end
3305
+ end
3306
+
3307
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
3308
+ # for other providers.
3309
+ module Model
3310
+ extend Revox::Internal::Type::Enum
3311
+
3312
+ TaggedSymbol =
3313
+ T.type_alias do
3314
+ T.all(
3315
+ Symbol,
3316
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Model
3317
+ )
3318
+ end
3319
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3320
+
3321
+ SONIC_3 =
3322
+ T.let(
3323
+ :"sonic-3",
3324
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Model::TaggedSymbol
3325
+ )
3326
+ SONIC_3_5 =
3327
+ T.let(
3328
+ :"sonic-3.5",
3329
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Model::TaggedSymbol
3330
+ )
3331
+
3332
+ sig do
3333
+ override.returns(
3334
+ T::Array[
3335
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Model::TaggedSymbol
3336
+ ]
3337
+ )
3338
+ end
3339
+ def self.values
3340
+ end
3341
+ end
3342
+ end
3343
+
3344
+ class Zoho < Revox::Internal::Type::BaseModel
3345
+ OrHash =
3346
+ T.type_alias do
3347
+ T.any(
3348
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho,
3349
+ Revox::Internal::AnyHash
3350
+ )
3351
+ end
3352
+
3353
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
3354
+ sig { returns(String) }
3355
+ attr_accessor :connection_id
3356
+
3357
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
3358
+ # field API names on the upserted record.
3359
+ sig do
3360
+ returns(
3361
+ T::Array[
3362
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::FieldMapping
3363
+ ]
3364
+ )
3365
+ end
3366
+ attr_accessor :field_mapping
3367
+
3368
+ # When true, also log the call as a record in Zoho's Calls module (related to the
3369
+ # upserted prospect via Who_Id).
3370
+ sig { returns(T::Boolean) }
3371
+ attr_accessor :log_call_activity
3372
+
3373
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
3374
+ sig { returns(String) }
3375
+ attr_accessor :module_
3376
+
3377
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
3378
+ # 'none' to push when outcome is null.
3379
+ sig do
3380
+ returns(
3381
+ T::Array[
3382
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3383
+ ]
3384
+ )
3385
+ end
3386
+ attr_accessor :outcomes
3387
+
3388
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
3389
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
3390
+ # prompt_variables and structured_output keys. When null/empty a default note
3391
+ # (outcome + summary + auto-listed extracted fields) is used.
3392
+ sig { returns(T.nilable(String)) }
3393
+ attr_accessor :template
3394
+
3395
+ sig do
3396
+ params(
3397
+ connection_id: String,
3398
+ field_mapping:
3399
+ T::Array[
3400
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::FieldMapping::OrHash
3401
+ ],
3402
+ log_call_activity: T::Boolean,
3403
+ module_: String,
3404
+ outcomes:
3405
+ T::Array[
3406
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::OrSymbol
3407
+ ],
3408
+ template: T.nilable(String)
3409
+ ).returns(T.attached_class)
3410
+ end
3411
+ def self.new(
3412
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
3413
+ connection_id:,
3414
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
3415
+ # field API names on the upserted record.
3416
+ field_mapping:,
3417
+ # When true, also log the call as a record in Zoho's Calls module (related to the
3418
+ # upserted prospect via Who_Id).
3419
+ log_call_activity:,
3420
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
3421
+ module_:,
3422
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
3423
+ # 'none' to push when outcome is null.
3424
+ outcomes:,
3425
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
3426
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
3427
+ # prompt_variables and structured_output keys. When null/empty a default note
3428
+ # (outcome + summary + auto-listed extracted fields) is used.
3429
+ template: nil
3430
+ )
3431
+ end
3432
+
3433
+ sig do
3434
+ override.returns(
3435
+ {
3436
+ connection_id: String,
3437
+ field_mapping:
3438
+ T::Array[
3439
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::FieldMapping
3440
+ ],
3441
+ log_call_activity: T::Boolean,
3442
+ module_: String,
3443
+ outcomes:
3444
+ T::Array[
3445
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3446
+ ],
3447
+ template: T.nilable(String)
3448
+ }
1035
3449
  )
1036
3450
  end
1037
3451
  def to_hash
1038
3452
  end
1039
3453
 
1040
- module Type
3454
+ class FieldMapping < Revox::Internal::Type::BaseModel
3455
+ OrHash =
3456
+ T.type_alias do
3457
+ T.any(
3458
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::FieldMapping,
3459
+ Revox::Internal::AnyHash
3460
+ )
3461
+ end
3462
+
3463
+ # Source key to read from the call: a structured_output field name, falling back
3464
+ # to a prompt variable of the same name.
3465
+ sig { returns(String) }
3466
+ attr_accessor :source
3467
+
3468
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
3469
+ # or a custom 'Budget\_\_c').
3470
+ sig { returns(String) }
3471
+ attr_accessor :zoho_field
3472
+
3473
+ sig do
3474
+ params(source: String, zoho_field: String).returns(
3475
+ T.attached_class
3476
+ )
3477
+ end
3478
+ def self.new(
3479
+ # Source key to read from the call: a structured_output field name, falling back
3480
+ # to a prompt variable of the same name.
3481
+ source:,
3482
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
3483
+ # or a custom 'Budget\_\_c').
3484
+ zoho_field:
3485
+ )
3486
+ end
3487
+
3488
+ sig { override.returns({ source: String, zoho_field: String }) }
3489
+ def to_hash
3490
+ end
3491
+ end
3492
+
3493
+ module Outcome
1041
3494
  extend Revox::Internal::Type::Enum
1042
3495
 
1043
3496
  TaggedSymbol =
1044
3497
  T.type_alias do
1045
3498
  T.all(
1046
3499
  Symbol,
1047
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type
3500
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome
1048
3501
  )
1049
3502
  end
1050
3503
  OrSymbol = T.type_alias { T.any(Symbol, String) }
1051
3504
 
1052
- STRING =
3505
+ NOT_INTERESTED =
1053
3506
  T.let(
1054
- :string,
1055
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3507
+ :not_interested,
3508
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1056
3509
  )
1057
- NUMBER =
3510
+ INTERESTED =
1058
3511
  T.let(
1059
- :number,
1060
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3512
+ :interested,
3513
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1061
3514
  )
1062
- BOOLEAN =
3515
+ COMPLETED =
1063
3516
  T.let(
1064
- :boolean,
1065
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3517
+ :completed,
3518
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1066
3519
  )
1067
- ENUM =
3520
+ REQUESTED_CALLBACK_LATER =
1068
3521
  T.let(
1069
- :enum,
1070
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3522
+ :requested_callback_later,
3523
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1071
3524
  )
1072
- DATE =
3525
+ REQUESTED_CALLBACK_NEW_NUMBER =
1073
3526
  T.let(
1074
- :date,
1075
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3527
+ :requested_callback_new_number,
3528
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1076
3529
  )
1077
- DATETIME =
3530
+ DO_NOT_CONTACT =
1078
3531
  T.let(
1079
- :datetime,
1080
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3532
+ :do_not_contact,
3533
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3534
+ )
3535
+ AI_AVERSE =
3536
+ T.let(
3537
+ :ai_averse,
3538
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
3539
+ )
3540
+ NONE =
3541
+ T.let(
3542
+ :none,
3543
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1081
3544
  )
1082
3545
 
1083
3546
  sig do
1084
3547
  override.returns(
1085
3548
  T::Array[
1086
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::StructuredOutputConfig::Type::TaggedSymbol
3549
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::Zoho::Outcome::TaggedSymbol
1087
3550
  ]
1088
3551
  )
1089
3552
  end
@@ -1092,51 +3555,43 @@ module Revox
1092
3555
  end
1093
3556
  end
1094
3557
 
1095
- class Voice < Revox::Internal::Type::BaseModel
3558
+ class CreatedBy < Revox::Internal::Type::BaseModel
1096
3559
  OrHash =
1097
3560
  T.type_alias do
1098
3561
  T.any(
1099
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice,
3562
+ Revox::Models::CampaignCreateResponse::Campaign::Assistant::CreatedBy,
1100
3563
  Revox::Internal::AnyHash
1101
3564
  )
1102
3565
  end
1103
3566
 
1104
- # The ID of the voice.
3567
+ # The database user id of the creator.
1105
3568
  sig { returns(String) }
1106
3569
  attr_accessor :id
1107
3570
 
1108
- # The provider of the voice.
1109
- sig do
1110
- returns(
1111
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
1112
- )
1113
- end
1114
- attr_accessor :provider
3571
+ sig { returns(String) }
3572
+ attr_accessor :email
1115
3573
 
1116
- # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
1117
- # 0.7–1.2. Default is 1.0.
1118
- sig { returns(T.nilable(Float)) }
1119
- attr_reader :speed
3574
+ sig { returns(T.nilable(String)) }
3575
+ attr_accessor :first_name
1120
3576
 
1121
- sig { params(speed: Float).void }
1122
- attr_writer :speed
3577
+ sig { returns(T.nilable(String)) }
3578
+ attr_accessor :last_name
1123
3579
 
3580
+ # The user who created the assistant.
1124
3581
  sig do
1125
3582
  params(
1126
3583
  id: String,
1127
- provider:
1128
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::OrSymbol,
1129
- speed: Float
3584
+ email: String,
3585
+ first_name: T.nilable(String),
3586
+ last_name: T.nilable(String)
1130
3587
  ).returns(T.attached_class)
1131
3588
  end
1132
3589
  def self.new(
1133
- # The ID of the voice.
3590
+ # The database user id of the creator.
1134
3591
  id:,
1135
- # The provider of the voice.
1136
- provider:,
1137
- # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
1138
- # 0.7–1.2. Default is 1.0.
1139
- speed: nil
3592
+ email:,
3593
+ first_name:,
3594
+ last_name:
1140
3595
  )
1141
3596
  end
1142
3597
 
@@ -1144,49 +3599,14 @@ module Revox
1144
3599
  override.returns(
1145
3600
  {
1146
3601
  id: String,
1147
- provider:
1148
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol,
1149
- speed: Float
3602
+ email: String,
3603
+ first_name: T.nilable(String),
3604
+ last_name: T.nilable(String)
1150
3605
  }
1151
3606
  )
1152
3607
  end
1153
3608
  def to_hash
1154
3609
  end
1155
-
1156
- # The provider of the voice.
1157
- module Provider
1158
- extend Revox::Internal::Type::Enum
1159
-
1160
- TaggedSymbol =
1161
- T.type_alias do
1162
- T.all(
1163
- Symbol,
1164
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider
1165
- )
1166
- end
1167
- OrSymbol = T.type_alias { T.any(Symbol, String) }
1168
-
1169
- CARTESIA =
1170
- T.let(
1171
- :cartesia,
1172
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
1173
- )
1174
- ELEVENLABS =
1175
- T.let(
1176
- :elevenlabs,
1177
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
1178
- )
1179
-
1180
- sig do
1181
- override.returns(
1182
- T::Array[
1183
- Revox::Models::CampaignCreateResponse::Campaign::Assistant::Voice::Provider::TaggedSymbol
1184
- ]
1185
- )
1186
- end
1187
- def self.values
1188
- end
1189
- end
1190
3610
  end
1191
3611
 
1192
3612
  class FaqItem < Revox::Internal::Type::BaseModel
@@ -1312,6 +3732,24 @@ module Revox
1312
3732
  )
1313
3733
  end
1314
3734
 
3735
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
3736
+ # Monday through Friday.
3737
+ sig do
3738
+ returns(
3739
+ T::Array[
3740
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3741
+ ]
3742
+ )
3743
+ end
3744
+ attr_accessor :allowed_days
3745
+
3746
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
3747
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
3748
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
3749
+ # Default: false.
3750
+ sig { returns(T::Boolean) }
3751
+ attr_accessor :call_twice_in_a_row
3752
+
1315
3753
  sig do
1316
3754
  returns(
1317
3755
  T::Array[
@@ -1335,6 +3773,11 @@ module Revox
1335
3773
  # iterations. If not provided, defaults will be used.
1336
3774
  sig do
1337
3775
  params(
3776
+ allowed_days:
3777
+ T::Array[
3778
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::OrSymbol
3779
+ ],
3780
+ call_twice_in_a_row: T::Boolean,
1338
3781
  calling_windows:
1339
3782
  T::Array[
1340
3783
  Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::CallingWindow::OrHash
@@ -1344,6 +3787,14 @@ module Revox
1344
3787
  ).returns(T.attached_class)
1345
3788
  end
1346
3789
  def self.new(
3790
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
3791
+ # Monday through Friday.
3792
+ allowed_days:,
3793
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
3794
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
3795
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
3796
+ # Default: false.
3797
+ call_twice_in_a_row:,
1347
3798
  calling_windows:,
1348
3799
  # Maximum number of call retry attempts. Default: 3.
1349
3800
  max_retry_attempts:,
@@ -1357,6 +3808,11 @@ module Revox
1357
3808
  sig do
1358
3809
  override.returns(
1359
3810
  {
3811
+ allowed_days:
3812
+ T::Array[
3813
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3814
+ ],
3815
+ call_twice_in_a_row: T::Boolean,
1360
3816
  calling_windows:
1361
3817
  T::Array[
1362
3818
  Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::CallingWindow
@@ -1369,6 +3825,65 @@ module Revox
1369
3825
  def to_hash
1370
3826
  end
1371
3827
 
3828
+ module AllowedDay
3829
+ extend Revox::Internal::Type::Enum
3830
+
3831
+ TaggedSymbol =
3832
+ T.type_alias do
3833
+ T.all(
3834
+ Symbol,
3835
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay
3836
+ )
3837
+ end
3838
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
3839
+
3840
+ MONDAY =
3841
+ T.let(
3842
+ :monday,
3843
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3844
+ )
3845
+ TUESDAY =
3846
+ T.let(
3847
+ :tuesday,
3848
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3849
+ )
3850
+ WEDNESDAY =
3851
+ T.let(
3852
+ :wednesday,
3853
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3854
+ )
3855
+ THURSDAY =
3856
+ T.let(
3857
+ :thursday,
3858
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3859
+ )
3860
+ FRIDAY =
3861
+ T.let(
3862
+ :friday,
3863
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3864
+ )
3865
+ SATURDAY =
3866
+ T.let(
3867
+ :saturday,
3868
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3869
+ )
3870
+ SUNDAY =
3871
+ T.let(
3872
+ :sunday,
3873
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3874
+ )
3875
+
3876
+ sig do
3877
+ override.returns(
3878
+ T::Array[
3879
+ Revox::Models::CampaignCreateResponse::Campaign::CallRetryConfig::AllowedDay::TaggedSymbol
3880
+ ]
3881
+ )
3882
+ end
3883
+ def self.values
3884
+ end
3885
+ end
3886
+
1372
3887
  class CallingWindow < Revox::Internal::Type::BaseModel
1373
3888
  OrHash =
1374
3889
  T.type_alias do
@@ -1429,6 +3944,131 @@ module Revox
1429
3944
  end
1430
3945
  end
1431
3946
 
3947
+ class CreatedBy < Revox::Internal::Type::BaseModel
3948
+ OrHash =
3949
+ T.type_alias do
3950
+ T.any(
3951
+ Revox::Models::CampaignCreateResponse::Campaign::CreatedBy,
3952
+ Revox::Internal::AnyHash
3953
+ )
3954
+ end
3955
+
3956
+ # The database user id (foreign key target on calls.assignee_id).
3957
+ sig { returns(String) }
3958
+ attr_accessor :id
3959
+
3960
+ sig { returns(String) }
3961
+ attr_accessor :email
3962
+
3963
+ sig { returns(T.nilable(String)) }
3964
+ attr_accessor :first_name
3965
+
3966
+ sig { returns(T.nilable(String)) }
3967
+ attr_accessor :last_name
3968
+
3969
+ # A member of the current organization.
3970
+ sig do
3971
+ params(
3972
+ id: String,
3973
+ email: String,
3974
+ first_name: T.nilable(String),
3975
+ last_name: T.nilable(String)
3976
+ ).returns(T.attached_class)
3977
+ end
3978
+ def self.new(
3979
+ # The database user id (foreign key target on calls.assignee_id).
3980
+ id:,
3981
+ email:,
3982
+ first_name:,
3983
+ last_name:
3984
+ )
3985
+ end
3986
+
3987
+ sig do
3988
+ override.returns(
3989
+ {
3990
+ id: String,
3991
+ email: String,
3992
+ first_name: T.nilable(String),
3993
+ last_name: T.nilable(String)
3994
+ }
3995
+ )
3996
+ end
3997
+ def to_hash
3998
+ end
3999
+ end
4000
+
4001
+ class FunnelStats < Revox::Internal::Type::BaseModel
4002
+ OrHash =
4003
+ T.type_alias do
4004
+ T.any(
4005
+ Revox::Models::CampaignCreateResponse::Campaign::FunnelStats,
4006
+ Revox::Internal::AnyHash
4007
+ )
4008
+ end
4009
+
4010
+ sig { returns(Float) }
4011
+ attr_accessor :hot
4012
+
4013
+ sig { returns(Float) }
4014
+ attr_accessor :talked_to_human
4015
+
4016
+ sig { returns(Float) }
4017
+ attr_accessor :total_leads
4018
+
4019
+ sig do
4020
+ params(
4021
+ hot: Float,
4022
+ talked_to_human: Float,
4023
+ total_leads: Float
4024
+ ).returns(T.attached_class)
4025
+ end
4026
+ def self.new(hot:, talked_to_human:, total_leads:)
4027
+ end
4028
+
4029
+ sig do
4030
+ override.returns(
4031
+ { hot: Float, talked_to_human: Float, total_leads: Float }
4032
+ )
4033
+ end
4034
+ def to_hash
4035
+ end
4036
+ end
4037
+
4038
+ module PausedReason
4039
+ extend Revox::Internal::Type::Enum
4040
+
4041
+ TaggedSymbol =
4042
+ T.type_alias do
4043
+ T.all(
4044
+ Symbol,
4045
+ Revox::Models::CampaignCreateResponse::Campaign::PausedReason
4046
+ )
4047
+ end
4048
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
4049
+
4050
+ MANUAL =
4051
+ T.let(
4052
+ :manual,
4053
+ Revox::Models::CampaignCreateResponse::Campaign::PausedReason::TaggedSymbol
4054
+ )
4055
+ NO_PRESENCE =
4056
+ T.let(
4057
+ :no_presence,
4058
+ Revox::Models::CampaignCreateResponse::Campaign::PausedReason::TaggedSymbol
4059
+ )
4060
+
4061
+ sig do
4062
+ override.returns(
4063
+ T::Array[
4064
+ Revox::Models::CampaignCreateResponse::Campaign::PausedReason::TaggedSymbol
4065
+ ]
4066
+ )
4067
+ end
4068
+ def self.values
4069
+ end
4070
+ end
4071
+
1432
4072
  class RowStats < Revox::Internal::Type::BaseModel
1433
4073
  OrHash =
1434
4074
  T.type_alias do
@@ -1484,6 +4124,46 @@ module Revox
1484
4124
  def to_hash
1485
4125
  end
1486
4126
  end
4127
+
4128
+ # The status of the structured output extraction.
4129
+ module StructuredOutputExtraction
4130
+ extend Revox::Internal::Type::Enum
4131
+
4132
+ TaggedSymbol =
4133
+ T.type_alias do
4134
+ T.all(
4135
+ Symbol,
4136
+ Revox::Models::CampaignCreateResponse::Campaign::StructuredOutputExtraction
4137
+ )
4138
+ end
4139
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
4140
+
4141
+ NONE =
4142
+ T.let(
4143
+ :none,
4144
+ Revox::Models::CampaignCreateResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
4145
+ )
4146
+ RUNNING =
4147
+ T.let(
4148
+ :running,
4149
+ Revox::Models::CampaignCreateResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
4150
+ )
4151
+ COMPLETED =
4152
+ T.let(
4153
+ :completed,
4154
+ Revox::Models::CampaignCreateResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
4155
+ )
4156
+
4157
+ sig do
4158
+ override.returns(
4159
+ T::Array[
4160
+ Revox::Models::CampaignCreateResponse::Campaign::StructuredOutputExtraction::TaggedSymbol
4161
+ ]
4162
+ )
4163
+ end
4164
+ def self.values
4165
+ end
4166
+ end
1487
4167
  end
1488
4168
  end
1489
4169
  end