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