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
@@ -49,8 +49,25 @@ module Revox
49
49
  sig { returns(String) }
50
50
  attr_accessor :id
51
51
 
52
- # The background sound to play during the call. Useful to give the impression that
53
- # your AI agent is in an office.
52
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
53
+ # after-call SMS is sent. Use "none" when outcome is null.
54
+ sig do
55
+ returns(
56
+ T.nilable(
57
+ T::Array[
58
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
59
+ ]
60
+ )
61
+ )
62
+ end
63
+ attr_accessor :after_call_sms_outcomes
64
+
65
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
66
+ # placeholders. When null, no after-call SMS is sent.
67
+ sig { returns(T.nilable(String)) }
68
+ attr_accessor :after_call_sms_prompt
69
+
70
+ # Ambient background sound to play during the call. null disables it.
54
71
  sig do
55
72
  returns(
56
73
  T.nilable(
@@ -60,6 +77,10 @@ module Revox
60
77
  end
61
78
  attr_accessor :background_sound
62
79
 
80
+ # Volume of the ambient background sound (0 = silent, 1 = max).
81
+ sig { returns(Float) }
82
+ attr_accessor :background_sound_volume
83
+
63
84
  sig do
64
85
  returns(
65
86
  T.nilable(
@@ -100,9 +121,51 @@ module Revox
100
121
  end
101
122
  attr_writer :call_retry_config
102
123
 
124
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
125
+ sig { returns(T.nilable(String)) }
126
+ attr_accessor :cartesia_dictionary_pronunciation_id
127
+
103
128
  sig { returns(T.anything) }
104
129
  attr_accessor :created_at
105
130
 
131
+ sig do
132
+ returns(
133
+ T.nilable(
134
+ T::Array[
135
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool
136
+ ]
137
+ )
138
+ )
139
+ end
140
+ attr_accessor :custom_tools
141
+
142
+ # Email address(es) to receive notifications when a call ends with a matching
143
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
144
+ # bob@y.com").
145
+ sig { returns(T.nilable(String)) }
146
+ attr_accessor :email_notification_address
147
+
148
+ # The language used for the notification email content. One of "en" or "fr".
149
+ sig do
150
+ returns(
151
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
152
+ )
153
+ end
154
+ attr_accessor :email_notification_language
155
+
156
+ # Which call outcomes trigger an email notification. E.g. ["interested",
157
+ # "completed", "none"]. Use "none" when outcome is null.
158
+ sig do
159
+ returns(
160
+ T.nilable(
161
+ T::Array[
162
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
163
+ ]
164
+ )
165
+ )
166
+ end
167
+ attr_accessor :email_notification_outcomes
168
+
106
169
  sig { returns(T.nilable(String)) }
107
170
  attr_accessor :end_of_call_sentence
108
171
 
@@ -120,6 +183,22 @@ module Revox
120
183
  end
121
184
  attr_accessor :first_sentence_mode
122
185
 
186
+ # Override the default outbound phone number for calls placed with this assistant.
187
+ # When null, the organization's default phone number is used.
188
+ sig { returns(T.nilable(String)) }
189
+ attr_accessor :from_phone_number
190
+
191
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
192
+ # not configured.
193
+ sig do
194
+ returns(
195
+ T.nilable(
196
+ Revox::Models::AssistantCreateResponse::Assistant::HumanTransferMode::TaggedSymbol
197
+ )
198
+ )
199
+ end
200
+ attr_accessor :human_transfer_mode
201
+
123
202
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
124
203
  # skip turns to navigate phone menus.
125
204
  sig { returns(T::Boolean) }
@@ -132,20 +211,97 @@ module Revox
132
211
  end
133
212
  attr_accessor :llm_model
134
213
 
214
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
215
+ # unset.
216
+ sig { returns(T.nilable(String)) }
217
+ attr_accessor :logo_url
218
+
135
219
  # The maximum duration of the call in seconds. This is the maximum time the call
136
220
  # will be allowed to run.
137
221
  sig { returns(Float) }
138
222
  attr_accessor :max_call_duration_secs
139
223
 
224
+ # Optional message the agent will say, without being interruptible, when the call
225
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
226
+ # null, the call ends silently.
227
+ sig { returns(T.nilable(String)) }
228
+ attr_accessor :max_duration_end_message
229
+
140
230
  sig { returns(String) }
141
231
  attr_accessor :name
142
232
 
143
233
  sig { returns(String) }
144
234
  attr_accessor :organization_id
145
235
 
236
+ sig do
237
+ returns(
238
+ T.nilable(
239
+ Revox::Models::AssistantCreateResponse::Assistant::Position
240
+ )
241
+ )
242
+ end
243
+ attr_reader :position
244
+
245
+ sig do
246
+ params(
247
+ position:
248
+ T.nilable(
249
+ Revox::Models::AssistantCreateResponse::Assistant::Position::OrHash
250
+ )
251
+ ).void
252
+ end
253
+ attr_writer :position
254
+
146
255
  sig { returns(String) }
147
256
  attr_accessor :prompt
148
257
 
258
+ sig do
259
+ returns(
260
+ T.nilable(
261
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow
262
+ )
263
+ )
264
+ end
265
+ attr_reader :prompt_flow
266
+
267
+ sig do
268
+ params(
269
+ prompt_flow:
270
+ T.nilable(
271
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::OrHash
272
+ )
273
+ ).void
274
+ end
275
+ attr_writer :prompt_flow
276
+
277
+ sig do
278
+ returns(
279
+ T.nilable(Revox::Models::AssistantCreateResponse::Assistant::Slack)
280
+ )
281
+ end
282
+ attr_reader :slack
283
+
284
+ sig do
285
+ params(
286
+ slack:
287
+ T.nilable(
288
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::OrHash
289
+ )
290
+ ).void
291
+ end
292
+ attr_writer :slack
293
+
294
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
295
+ # the user on the call.
296
+ sig { returns(T::Boolean) }
297
+ attr_accessor :sms_enabled
298
+
299
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
300
+ # instead of letting the agent generate the message. Supports {{variable}}
301
+ # placeholders.
302
+ sig { returns(T.nilable(String)) }
303
+ attr_accessor :sms_template
304
+
149
305
  # The structured output config to use for the call. This is used to extract the
150
306
  # data from the call (like email, name, company name, etc.).
151
307
  sig do
@@ -159,10 +315,73 @@ module Revox
159
315
  end
160
316
  attr_accessor :structured_output_config
161
317
 
318
+ # Custom prompt for structured data extraction. If not provided, a default prompt
319
+ # is used. Available variables: {{transcript}}, {{call_direction}},
320
+ # {{user_phone_number}}, {{agent_phone_number}}.
321
+ sig { returns(T.nilable(String)) }
322
+ attr_accessor :structured_output_prompt
323
+
324
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
325
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
326
+ # replacing existing entries.
327
+ sig do
328
+ returns(
329
+ T.nilable(
330
+ Revox::Models::AssistantCreateResponse::Assistant::SttContext
331
+ )
332
+ )
333
+ end
334
+ attr_reader :stt_context
335
+
336
+ sig do
337
+ params(
338
+ stt_context:
339
+ T.nilable(
340
+ Revox::Models::AssistantCreateResponse::Assistant::SttContext::OrHash
341
+ )
342
+ ).void
343
+ end
344
+ attr_writer :stt_context
345
+
346
+ # Transcriber (speech-to-text) model used for the assistant.
347
+ sig do
348
+ returns(
349
+ Revox::Models::AssistantCreateResponse::Assistant::SttModel::TaggedSymbol
350
+ )
351
+ end
352
+ attr_accessor :stt_model
353
+
354
+ # Audio clip to play while the agent is processing a response. One of the built-in
355
+ # LiveKit audio clips; null disables it.
356
+ sig do
357
+ returns(
358
+ T.nilable(
359
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
360
+ )
361
+ )
362
+ end
363
+ attr_accessor :thinking_sound
364
+
365
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
366
+ # the agent is silent while thinking.
367
+ sig { returns(Float) }
368
+ attr_accessor :thinking_sound_probability
369
+
370
+ # Volume of the thinking sound (0 = silent, 1 = max).
371
+ sig { returns(Float) }
372
+ attr_accessor :thinking_sound_volume
373
+
162
374
  # Phone number to transfer calls to when users request to speak to a human agent.
163
375
  sig { returns(T.nilable(String)) }
164
376
  attr_accessor :transfer_phone_number
165
377
 
378
+ sig do
379
+ returns(
380
+ Revox::Models::AssistantCreateResponse::Assistant::Type::TaggedSymbol
381
+ )
382
+ end
383
+ attr_accessor :type
384
+
166
385
  sig { returns(T.anything) }
167
386
  attr_accessor :updated_at
168
387
 
@@ -188,10 +407,57 @@ module Revox
188
407
  sig { returns(T.nilable(String)) }
189
408
  attr_accessor :voicemail_message
190
409
 
410
+ # Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
411
+ # When null, no SMS is sent on voicemail.
412
+ sig { returns(T.nilable(String)) }
413
+ attr_accessor :voicemail_sms_prompt
414
+
415
+ # Warm transfer only: instructions for the supervisor handoff summary; null when
416
+ # not configured or cold transfer.
417
+ sig { returns(T.nilable(String)) }
418
+ attr_accessor :warm_transfer_summary_instructions
419
+
191
420
  # The webhook URL to call when the call is completed.
192
421
  sig { returns(T.nilable(String)) }
193
422
  attr_accessor :webhook_url
194
423
 
424
+ sig do
425
+ returns(
426
+ T.nilable(Revox::Models::AssistantCreateResponse::Assistant::Zoho)
427
+ )
428
+ end
429
+ attr_reader :zoho
430
+
431
+ sig do
432
+ params(
433
+ zoho:
434
+ T.nilable(
435
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::OrHash
436
+ )
437
+ ).void
438
+ end
439
+ attr_writer :zoho
440
+
441
+ # The user who created the assistant.
442
+ sig do
443
+ returns(
444
+ T.nilable(
445
+ Revox::Models::AssistantCreateResponse::Assistant::CreatedBy
446
+ )
447
+ )
448
+ end
449
+ attr_reader :created_by
450
+
451
+ sig do
452
+ params(
453
+ created_by:
454
+ T.nilable(
455
+ Revox::Models::AssistantCreateResponse::Assistant::CreatedBy::OrHash
456
+ )
457
+ ).void
458
+ end
459
+ attr_writer :created_by
460
+
195
461
  sig do
196
462
  returns(
197
463
  T.nilable(
@@ -213,6 +479,12 @@ module Revox
213
479
  end
214
480
  attr_writer :faq_items
215
481
 
482
+ sig { returns(T.nilable(T::Boolean)) }
483
+ attr_reader :is_realestate_assistant
484
+
485
+ sig { params(is_realestate_assistant: T::Boolean).void }
486
+ attr_writer :is_realestate_assistant
487
+
216
488
  sig { returns(T.nilable(Float)) }
217
489
  attr_reader :pending_faq_count
218
490
 
@@ -222,10 +494,18 @@ module Revox
222
494
  sig do
223
495
  params(
224
496
  id: String,
497
+ after_call_sms_outcomes:
498
+ T.nilable(
499
+ T::Array[
500
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::OrSymbol
501
+ ]
502
+ ),
503
+ after_call_sms_prompt: T.nilable(String),
225
504
  background_sound:
226
505
  T.nilable(
227
506
  Revox::Models::AssistantCreateResponse::Assistant::BackgroundSound::OrSymbol
228
507
  ),
508
+ background_sound_volume: Float,
229
509
  calendly:
230
510
  T.nilable(
231
511
  Revox::Models::AssistantCreateResponse::Assistant::Calendly::OrHash
@@ -234,81 +514,217 @@ module Revox
234
514
  T.nilable(
235
515
  Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::OrHash
236
516
  ),
517
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
237
518
  created_at: T.anything,
519
+ custom_tools:
520
+ T.nilable(
521
+ T::Array[
522
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::OrHash
523
+ ]
524
+ ),
525
+ email_notification_address: T.nilable(String),
526
+ email_notification_language:
527
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationLanguage::OrSymbol,
528
+ email_notification_outcomes:
529
+ T.nilable(
530
+ T::Array[
531
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::OrSymbol
532
+ ]
533
+ ),
238
534
  end_of_call_sentence: T.nilable(String),
239
535
  first_sentence: T.nilable(String),
240
536
  first_sentence_delay_ms: Integer,
241
537
  first_sentence_mode:
242
538
  Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::OrSymbol,
539
+ from_phone_number: T.nilable(String),
540
+ human_transfer_mode:
541
+ T.nilable(
542
+ Revox::Models::AssistantCreateResponse::Assistant::HumanTransferMode::OrSymbol
543
+ ),
243
544
  ivr_navigation_enabled: T::Boolean,
244
545
  llm_model:
245
546
  T.any(
246
547
  Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::OrHash,
247
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember1::OrHash
548
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember1::OrHash,
549
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember2::OrHash,
550
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3::OrHash
248
551
  ),
552
+ logo_url: T.nilable(String),
249
553
  max_call_duration_secs: Float,
554
+ max_duration_end_message: T.nilable(String),
250
555
  name: String,
251
556
  organization_id: String,
557
+ position:
558
+ T.nilable(
559
+ Revox::Models::AssistantCreateResponse::Assistant::Position::OrHash
560
+ ),
252
561
  prompt: String,
562
+ prompt_flow:
563
+ T.nilable(
564
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::OrHash
565
+ ),
566
+ slack:
567
+ T.nilable(
568
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::OrHash
569
+ ),
570
+ sms_enabled: T::Boolean,
571
+ sms_template: T.nilable(String),
253
572
  structured_output_config:
254
573
  T.nilable(
255
574
  T::Array[
256
575
  Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::OrHash
257
576
  ]
258
577
  ),
578
+ structured_output_prompt: T.nilable(String),
579
+ stt_context:
580
+ T.nilable(
581
+ Revox::Models::AssistantCreateResponse::Assistant::SttContext::OrHash
582
+ ),
583
+ stt_model:
584
+ Revox::Models::AssistantCreateResponse::Assistant::SttModel::OrSymbol,
585
+ thinking_sound:
586
+ T.nilable(
587
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::OrSymbol
588
+ ),
589
+ thinking_sound_probability: Float,
590
+ thinking_sound_volume: Float,
259
591
  transfer_phone_number: T.nilable(String),
592
+ type:
593
+ Revox::Models::AssistantCreateResponse::Assistant::Type::OrSymbol,
260
594
  updated_at: T.anything,
261
595
  voice:
262
596
  T.nilable(
263
597
  Revox::Models::AssistantCreateResponse::Assistant::Voice::OrHash
264
598
  ),
265
599
  voicemail_message: T.nilable(String),
600
+ voicemail_sms_prompt: T.nilable(String),
601
+ warm_transfer_summary_instructions: T.nilable(String),
266
602
  webhook_url: T.nilable(String),
603
+ zoho:
604
+ T.nilable(
605
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::OrHash
606
+ ),
607
+ created_by:
608
+ T.nilable(
609
+ Revox::Models::AssistantCreateResponse::Assistant::CreatedBy::OrHash
610
+ ),
267
611
  faq_items:
268
612
  T::Array[
269
613
  Revox::Models::AssistantCreateResponse::Assistant::FaqItem::OrHash
270
614
  ],
615
+ is_realestate_assistant: T::Boolean,
271
616
  pending_faq_count: Float
272
617
  ).returns(T.attached_class)
273
618
  end
274
619
  def self.new(
275
620
  id:,
276
- # The background sound to play during the call. Useful to give the impression that
277
- # your AI agent is in an office.
621
+ # Which call outcomes trigger the after-call SMS. When empty or null, no
622
+ # after-call SMS is sent. Use "none" when outcome is null.
623
+ after_call_sms_outcomes:,
624
+ # Prompt / instructions for the after-call SMS. Supports {{variable}}
625
+ # placeholders. When null, no after-call SMS is sent.
626
+ after_call_sms_prompt:,
627
+ # Ambient background sound to play during the call. null disables it.
278
628
  background_sound:,
629
+ # Volume of the ambient background sound (0 = silent, 1 = max).
630
+ background_sound_volume:,
279
631
  calendly:,
280
632
  # Configuration for call retry behavior including time windows, delays, and max
281
633
  # iterations. If not provided, defaults will be used.
282
634
  call_retry_config:,
635
+ # Optional Cartesia pronunciation dictionary ID linked to this assistant.
636
+ cartesia_dictionary_pronunciation_id:,
283
637
  created_at:,
638
+ custom_tools:,
639
+ # Email address(es) to receive notifications when a call ends with a matching
640
+ # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
641
+ # bob@y.com").
642
+ email_notification_address:,
643
+ # The language used for the notification email content. One of "en" or "fr".
644
+ email_notification_language:,
645
+ # Which call outcomes trigger an email notification. E.g. ["interested",
646
+ # "completed", "none"]. Use "none" when outcome is null.
647
+ email_notification_outcomes:,
284
648
  end_of_call_sentence:,
285
649
  first_sentence:,
286
650
  # Delay in milliseconds before speaking the first sentence. Default: 400.
287
651
  first_sentence_delay_ms:,
288
652
  first_sentence_mode:,
653
+ # Override the default outbound phone number for calls placed with this assistant.
654
+ # When null, the organization's default phone number is used.
655
+ from_phone_number:,
656
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
657
+ # not configured.
658
+ human_transfer_mode:,
289
659
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
290
660
  # skip turns to navigate phone menus.
291
661
  ivr_navigation_enabled:,
292
662
  llm_model:,
663
+ # Public URL of the brand logo shown on the assistant's demo page. Null when
664
+ # unset.
665
+ logo_url:,
293
666
  # The maximum duration of the call in seconds. This is the maximum time the call
294
667
  # will be allowed to run.
295
668
  max_call_duration_secs:,
669
+ # Optional message the agent will say, without being interruptible, when the call
670
+ # reaches its max duration. Kept short so it fits inside the farewell buffer. If
671
+ # null, the call ends silently.
672
+ max_duration_end_message:,
296
673
  name:,
297
674
  organization_id:,
675
+ position:,
298
676
  prompt:,
677
+ prompt_flow:,
678
+ slack:,
679
+ # Enable SMS tool during calls. When enabled, the agent can send SMS messages to
680
+ # the user on the call.
681
+ sms_enabled:,
682
+ # Hardcoded SMS template to send during calls. When set, this exact text is sent
683
+ # instead of letting the agent generate the message. Supports {{variable}}
684
+ # placeholders.
685
+ sms_template:,
299
686
  # The structured output config to use for the call. This is used to extract the
300
687
  # data from the call (like email, name, company name, etc.).
301
688
  structured_output_config:,
689
+ # Custom prompt for structured data extraction. If not provided, a default prompt
690
+ # is used. Available variables: {{transcript}}, {{call_direction}},
691
+ # {{user_phone_number}}, {{agent_phone_number}}.
692
+ structured_output_prompt:,
693
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
694
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
695
+ # replacing existing entries.
696
+ stt_context:,
697
+ # Transcriber (speech-to-text) model used for the assistant.
698
+ stt_model:,
699
+ # Audio clip to play while the agent is processing a response. One of the built-in
700
+ # LiveKit audio clips; null disables it.
701
+ thinking_sound:,
702
+ # Probability [0..1] that the thinking sound plays on any given turn; otherwise
703
+ # the agent is silent while thinking.
704
+ thinking_sound_probability:,
705
+ # Volume of the thinking sound (0 = silent, 1 = max).
706
+ thinking_sound_volume:,
302
707
  # Phone number to transfer calls to when users request to speak to a human agent.
303
708
  transfer_phone_number:,
709
+ type:,
304
710
  updated_at:,
305
711
  voice:,
306
712
  # If set, when voicemail is detected the agent will speak this message then hang
307
713
  # up; if null, hang up immediately.
308
714
  voicemail_message:,
715
+ # Prompt / instructions for the voicemail SMS. Supports {{variable}} placeholders.
716
+ # When null, no SMS is sent on voicemail.
717
+ voicemail_sms_prompt:,
718
+ # Warm transfer only: instructions for the supervisor handoff summary; null when
719
+ # not configured or cold transfer.
720
+ warm_transfer_summary_instructions:,
309
721
  # The webhook URL to call when the call is completed.
310
722
  webhook_url:,
723
+ zoho:,
724
+ # The user who created the assistant.
725
+ created_by: nil,
311
726
  faq_items: nil,
727
+ is_realestate_assistant: nil,
312
728
  pending_faq_count: nil
313
729
  )
314
730
  end
@@ -317,10 +733,18 @@ module Revox
317
733
  override.returns(
318
734
  {
319
735
  id: String,
736
+ after_call_sms_outcomes:
737
+ T.nilable(
738
+ T::Array[
739
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
740
+ ]
741
+ ),
742
+ after_call_sms_prompt: T.nilable(String),
320
743
  background_sound:
321
744
  T.nilable(
322
745
  Revox::Models::AssistantCreateResponse::Assistant::BackgroundSound::TaggedSymbol
323
746
  ),
747
+ background_sound_volume: Float,
324
748
  calendly:
325
749
  T.nilable(
326
750
  Revox::Models::AssistantCreateResponse::Assistant::Calendly
@@ -329,37 +753,100 @@ module Revox
329
753
  T.nilable(
330
754
  Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig
331
755
  ),
756
+ cartesia_dictionary_pronunciation_id: T.nilable(String),
332
757
  created_at: T.anything,
758
+ custom_tools:
759
+ T.nilable(
760
+ T::Array[
761
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool
762
+ ]
763
+ ),
764
+ email_notification_address: T.nilable(String),
765
+ email_notification_language:
766
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationLanguage::TaggedSymbol,
767
+ email_notification_outcomes:
768
+ T.nilable(
769
+ T::Array[
770
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
771
+ ]
772
+ ),
333
773
  end_of_call_sentence: T.nilable(String),
334
774
  first_sentence: T.nilable(String),
335
775
  first_sentence_delay_ms: Integer,
336
776
  first_sentence_mode:
337
777
  Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::TaggedSymbol,
778
+ from_phone_number: T.nilable(String),
779
+ human_transfer_mode:
780
+ T.nilable(
781
+ Revox::Models::AssistantCreateResponse::Assistant::HumanTransferMode::TaggedSymbol
782
+ ),
338
783
  ivr_navigation_enabled: T::Boolean,
339
784
  llm_model:
340
785
  Revox::Models::AssistantCreateResponse::Assistant::LlmModel::Variants,
786
+ logo_url: T.nilable(String),
341
787
  max_call_duration_secs: Float,
788
+ max_duration_end_message: T.nilable(String),
342
789
  name: String,
343
790
  organization_id: String,
791
+ position:
792
+ T.nilable(
793
+ Revox::Models::AssistantCreateResponse::Assistant::Position
794
+ ),
344
795
  prompt: String,
796
+ prompt_flow:
797
+ T.nilable(
798
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow
799
+ ),
800
+ slack:
801
+ T.nilable(
802
+ Revox::Models::AssistantCreateResponse::Assistant::Slack
803
+ ),
804
+ sms_enabled: T::Boolean,
805
+ sms_template: T.nilable(String),
345
806
  structured_output_config:
346
807
  T.nilable(
347
808
  T::Array[
348
809
  Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig
349
810
  ]
350
811
  ),
812
+ structured_output_prompt: T.nilable(String),
813
+ stt_context:
814
+ T.nilable(
815
+ Revox::Models::AssistantCreateResponse::Assistant::SttContext
816
+ ),
817
+ stt_model:
818
+ Revox::Models::AssistantCreateResponse::Assistant::SttModel::TaggedSymbol,
819
+ thinking_sound:
820
+ T.nilable(
821
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
822
+ ),
823
+ thinking_sound_probability: Float,
824
+ thinking_sound_volume: Float,
351
825
  transfer_phone_number: T.nilable(String),
826
+ type:
827
+ Revox::Models::AssistantCreateResponse::Assistant::Type::TaggedSymbol,
352
828
  updated_at: T.anything,
353
829
  voice:
354
830
  T.nilable(
355
831
  Revox::Models::AssistantCreateResponse::Assistant::Voice
356
832
  ),
357
833
  voicemail_message: T.nilable(String),
834
+ voicemail_sms_prompt: T.nilable(String),
835
+ warm_transfer_summary_instructions: T.nilable(String),
358
836
  webhook_url: T.nilable(String),
837
+ zoho:
838
+ T.nilable(
839
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho
840
+ ),
841
+ created_by:
842
+ T.nilable(
843
+ Revox::Models::AssistantCreateResponse::Assistant::CreatedBy
844
+ ),
359
845
  faq_items:
360
846
  T::Array[
361
847
  Revox::Models::AssistantCreateResponse::Assistant::FaqItem
362
848
  ],
849
+ is_realestate_assistant: T::Boolean,
363
850
  pending_faq_count: Float
364
851
  }
365
852
  )
@@ -367,30 +854,63 @@ module Revox
367
854
  def to_hash
368
855
  end
369
856
 
370
- # The background sound to play during the call. Useful to give the impression that
371
- # your AI agent is in an office.
372
- module BackgroundSound
857
+ module AfterCallSMSOutcome
373
858
  extend Revox::Internal::Type::Enum
374
859
 
375
860
  TaggedSymbol =
376
861
  T.type_alias do
377
862
  T.all(
378
863
  Symbol,
379
- Revox::Models::AssistantCreateResponse::Assistant::BackgroundSound
864
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome
380
865
  )
381
866
  end
382
867
  OrSymbol = T.type_alias { T.any(Symbol, String) }
383
868
 
384
- AUDIO_OFFICE_OGG =
869
+ NOT_INTERESTED =
385
870
  T.let(
386
- :"audio/office.ogg",
387
- Revox::Models::AssistantCreateResponse::Assistant::BackgroundSound::TaggedSymbol
871
+ :not_interested,
872
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
873
+ )
874
+ INTERESTED =
875
+ T.let(
876
+ :interested,
877
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
878
+ )
879
+ COMPLETED =
880
+ T.let(
881
+ :completed,
882
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
883
+ )
884
+ REQUESTED_CALLBACK_LATER =
885
+ T.let(
886
+ :requested_callback_later,
887
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
888
+ )
889
+ REQUESTED_CALLBACK_NEW_NUMBER =
890
+ T.let(
891
+ :requested_callback_new_number,
892
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
893
+ )
894
+ DO_NOT_CONTACT =
895
+ T.let(
896
+ :do_not_contact,
897
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
898
+ )
899
+ AI_AVERSE =
900
+ T.let(
901
+ :ai_averse,
902
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
903
+ )
904
+ NONE =
905
+ T.let(
906
+ :none,
907
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
388
908
  )
389
909
 
390
910
  sig do
391
911
  override.returns(
392
912
  T::Array[
393
- Revox::Models::AssistantCreateResponse::Assistant::BackgroundSound::TaggedSymbol
913
+ Revox::Models::AssistantCreateResponse::Assistant::AfterCallSMSOutcome::TaggedSymbol
394
914
  ]
395
915
  )
396
916
  end
@@ -398,16 +918,46 @@ module Revox
398
918
  end
399
919
  end
400
920
 
401
- class Calendly < Revox::Internal::Type::BaseModel
402
- OrHash =
403
- T.type_alias do
404
- T.any(
405
- Revox::Models::AssistantCreateResponse::Assistant::Calendly,
406
- Revox::Internal::AnyHash
407
- )
408
- end
921
+ # Ambient background sound to play during the call. null disables it.
922
+ module BackgroundSound
923
+ extend Revox::Internal::Type::Enum
409
924
 
410
- # The connection ID representing the link between your Calendly account and Revox.
925
+ TaggedSymbol =
926
+ T.type_alias do
927
+ T.all(
928
+ Symbol,
929
+ Revox::Models::AssistantCreateResponse::Assistant::BackgroundSound
930
+ )
931
+ end
932
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
933
+
934
+ AUDIO_OFFICE_OGG =
935
+ T.let(
936
+ :"audio/office.ogg",
937
+ Revox::Models::AssistantCreateResponse::Assistant::BackgroundSound::TaggedSymbol
938
+ )
939
+
940
+ sig do
941
+ override.returns(
942
+ T::Array[
943
+ Revox::Models::AssistantCreateResponse::Assistant::BackgroundSound::TaggedSymbol
944
+ ]
945
+ )
946
+ end
947
+ def self.values
948
+ end
949
+ end
950
+
951
+ class Calendly < Revox::Internal::Type::BaseModel
952
+ OrHash =
953
+ T.type_alias do
954
+ T.any(
955
+ Revox::Models::AssistantCreateResponse::Assistant::Calendly,
956
+ Revox::Internal::AnyHash
957
+ )
958
+ end
959
+
960
+ # The connection ID representing the link between your Calendly account and Revox.
411
961
  sig { returns(String) }
412
962
  attr_accessor :connection_id
413
963
 
@@ -446,6 +996,24 @@ module Revox
446
996
  )
447
997
  end
448
998
 
999
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
1000
+ # Monday through Friday.
1001
+ sig do
1002
+ returns(
1003
+ T::Array[
1004
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1005
+ ]
1006
+ )
1007
+ end
1008
+ attr_accessor :allowed_days
1009
+
1010
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
1011
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
1012
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
1013
+ # Default: false.
1014
+ sig { returns(T::Boolean) }
1015
+ attr_accessor :call_twice_in_a_row
1016
+
449
1017
  sig do
450
1018
  returns(
451
1019
  T::Array[
@@ -469,6 +1037,11 @@ module Revox
469
1037
  # iterations. If not provided, defaults will be used.
470
1038
  sig do
471
1039
  params(
1040
+ allowed_days:
1041
+ T::Array[
1042
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::OrSymbol
1043
+ ],
1044
+ call_twice_in_a_row: T::Boolean,
472
1045
  calling_windows:
473
1046
  T::Array[
474
1047
  Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::CallingWindow::OrHash
@@ -478,6 +1051,14 @@ module Revox
478
1051
  ).returns(T.attached_class)
479
1052
  end
480
1053
  def self.new(
1054
+ # Days of the week when calls are allowed, in the recipient's timezone. Default:
1055
+ # Monday through Friday.
1056
+ allowed_days:,
1057
+ # If true and max_retry_attempts >= 2, attempt #2 fires immediately (skipping
1058
+ # retry_delay_seconds) when attempt #1 didn't reach a human.
1059
+ # Calling-window/allowed-days checks still apply. Only affects the 1→2 transition.
1060
+ # Default: false.
1061
+ call_twice_in_a_row:,
481
1062
  calling_windows:,
482
1063
  # Maximum number of call retry attempts. Default: 3.
483
1064
  max_retry_attempts:,
@@ -491,6 +1072,11 @@ module Revox
491
1072
  sig do
492
1073
  override.returns(
493
1074
  {
1075
+ allowed_days:
1076
+ T::Array[
1077
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1078
+ ],
1079
+ call_twice_in_a_row: T::Boolean,
494
1080
  calling_windows:
495
1081
  T::Array[
496
1082
  Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::CallingWindow
@@ -503,6 +1089,65 @@ module Revox
503
1089
  def to_hash
504
1090
  end
505
1091
 
1092
+ module AllowedDay
1093
+ extend Revox::Internal::Type::Enum
1094
+
1095
+ TaggedSymbol =
1096
+ T.type_alias do
1097
+ T.all(
1098
+ Symbol,
1099
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay
1100
+ )
1101
+ end
1102
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1103
+
1104
+ MONDAY =
1105
+ T.let(
1106
+ :monday,
1107
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1108
+ )
1109
+ TUESDAY =
1110
+ T.let(
1111
+ :tuesday,
1112
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1113
+ )
1114
+ WEDNESDAY =
1115
+ T.let(
1116
+ :wednesday,
1117
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1118
+ )
1119
+ THURSDAY =
1120
+ T.let(
1121
+ :thursday,
1122
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1123
+ )
1124
+ FRIDAY =
1125
+ T.let(
1126
+ :friday,
1127
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1128
+ )
1129
+ SATURDAY =
1130
+ T.let(
1131
+ :saturday,
1132
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1133
+ )
1134
+ SUNDAY =
1135
+ T.let(
1136
+ :sunday,
1137
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1138
+ )
1139
+
1140
+ sig do
1141
+ override.returns(
1142
+ T::Array[
1143
+ Revox::Models::AssistantCreateResponse::Assistant::CallRetryConfig::AllowedDay::TaggedSymbol
1144
+ ]
1145
+ )
1146
+ end
1147
+ def self.values
1148
+ end
1149
+ end
1150
+
506
1151
  class CallingWindow < Revox::Internal::Type::BaseModel
507
1152
  OrHash =
508
1153
  T.type_alias do
@@ -563,124 +1208,287 @@ module Revox
563
1208
  end
564
1209
  end
565
1210
 
566
- module FirstSentenceMode
567
- extend Revox::Internal::Type::Enum
568
-
569
- TaggedSymbol =
1211
+ class CustomTool < Revox::Internal::Type::BaseModel
1212
+ OrHash =
570
1213
  T.type_alias do
571
- T.all(
572
- Symbol,
573
- Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode
1214
+ T.any(
1215
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool,
1216
+ Revox::Internal::AnyHash
574
1217
  )
575
1218
  end
576
- OrSymbol = T.type_alias { T.any(Symbol, String) }
577
1219
 
578
- GENERATED =
579
- T.let(
580
- :generated,
581
- Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::TaggedSymbol
1220
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
1221
+ # "{{name}}") for dynamic values
1222
+ sig { returns(T.nilable(String)) }
1223
+ attr_accessor :body_template
1224
+
1225
+ # Human-readable description of what the tool does, used by the LLM to decide when
1226
+ # to call it
1227
+ sig { returns(String) }
1228
+ attr_accessor :description
1229
+
1230
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
1231
+ sig do
1232
+ returns(
1233
+ T::Array[
1234
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Header
1235
+ ]
582
1236
  )
583
- STATIC =
584
- T.let(
585
- :static,
586
- Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::TaggedSymbol
1237
+ end
1238
+ attr_accessor :headers
1239
+
1240
+ # Schema defining the parameters the LLM should extract from the conversation to
1241
+ # pass to this tool
1242
+ sig do
1243
+ returns(
1244
+ T::Array[
1245
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema
1246
+ ]
587
1247
  )
588
- NONE =
589
- T.let(
590
- :none,
591
- Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::TaggedSymbol
1248
+ end
1249
+ attr_accessor :input_schema
1250
+
1251
+ # HTTP method to use when calling the API endpoint
1252
+ sig do
1253
+ returns(
1254
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method::TaggedSymbol
592
1255
  )
1256
+ end
1257
+ attr_accessor :method_
1258
+
1259
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
1260
+ sig { returns(String) }
1261
+ attr_accessor :name
593
1262
 
1263
+ # Query string parameters appended to the URL. Values support {{variable}}
1264
+ # placeholders
594
1265
  sig do
595
- override.returns(
1266
+ returns(
596
1267
  T::Array[
597
- Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::TaggedSymbol
1268
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::QueryParam
598
1269
  ]
599
1270
  )
600
1271
  end
601
- def self.values
1272
+ attr_accessor :query_params
1273
+
1274
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
1275
+ # values
1276
+ sig { returns(String) }
1277
+ attr_accessor :url
1278
+
1279
+ sig do
1280
+ params(
1281
+ body_template: T.nilable(String),
1282
+ description: String,
1283
+ headers:
1284
+ T::Array[
1285
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Header::OrHash
1286
+ ],
1287
+ input_schema:
1288
+ T::Array[
1289
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::OrHash
1290
+ ],
1291
+ method_:
1292
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method::OrSymbol,
1293
+ name: String,
1294
+ query_params:
1295
+ T::Array[
1296
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::QueryParam::OrHash
1297
+ ],
1298
+ url: String
1299
+ ).returns(T.attached_class)
1300
+ end
1301
+ def self.new(
1302
+ # JSON body template for the request. Use quoted {{variable}} placeholders (e.g.
1303
+ # "{{name}}") for dynamic values
1304
+ body_template:,
1305
+ # Human-readable description of what the tool does, used by the LLM to decide when
1306
+ # to call it
1307
+ description:,
1308
+ # HTTP headers to include in the request. Values support {{variable}} placeholders
1309
+ headers:,
1310
+ # Schema defining the parameters the LLM should extract from the conversation to
1311
+ # pass to this tool
1312
+ input_schema:,
1313
+ # HTTP method to use when calling the API endpoint
1314
+ method_:,
1315
+ # Unique tool name in lowercase_snake_case (e.g. check_inventory)
1316
+ name:,
1317
+ # Query string parameters appended to the URL. Values support {{variable}}
1318
+ # placeholders
1319
+ query_params:,
1320
+ # Full URL of the API endpoint. Supports {{variable}} placeholders for dynamic
1321
+ # values
1322
+ url:
1323
+ )
602
1324
  end
603
- end
604
1325
 
605
- module LlmModel
606
- extend Revox::Internal::Type::Union
1326
+ sig do
1327
+ override.returns(
1328
+ {
1329
+ body_template: T.nilable(String),
1330
+ description: String,
1331
+ headers:
1332
+ T::Array[
1333
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Header
1334
+ ],
1335
+ input_schema:
1336
+ T::Array[
1337
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema
1338
+ ],
1339
+ method_:
1340
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method::TaggedSymbol,
1341
+ name: String,
1342
+ query_params:
1343
+ T::Array[
1344
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::QueryParam
1345
+ ],
1346
+ url: String
1347
+ }
1348
+ )
1349
+ end
1350
+ def to_hash
1351
+ end
607
1352
 
608
- Variants =
609
- T.type_alias do
610
- T.any(
611
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0,
612
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember1
613
- )
1353
+ class Header < Revox::Internal::Type::BaseModel
1354
+ OrHash =
1355
+ T.type_alias do
1356
+ T.any(
1357
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Header,
1358
+ Revox::Internal::AnyHash
1359
+ )
1360
+ end
1361
+
1362
+ sig { returns(String) }
1363
+ attr_accessor :key
1364
+
1365
+ sig { returns(String) }
1366
+ attr_accessor :value
1367
+
1368
+ sig { params(key: String, value: String).returns(T.attached_class) }
1369
+ def self.new(key:, value:)
614
1370
  end
615
1371
 
616
- class UnionMember0 < Revox::Internal::Type::BaseModel
1372
+ sig { override.returns({ key: String, value: String }) }
1373
+ def to_hash
1374
+ end
1375
+ end
1376
+
1377
+ class InputSchema < Revox::Internal::Type::BaseModel
617
1378
  OrHash =
618
1379
  T.type_alias do
619
1380
  T.any(
620
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0,
1381
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema,
621
1382
  Revox::Internal::AnyHash
622
1383
  )
623
1384
  end
624
1385
 
1386
+ sig { returns(String) }
1387
+ attr_accessor :name
1388
+
1389
+ sig { returns(T::Boolean) }
1390
+ attr_accessor :required
1391
+
625
1392
  sig do
626
1393
  returns(
627
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1394
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
628
1395
  )
629
1396
  end
630
- attr_accessor :name
631
-
632
- sig { returns(Symbol) }
633
1397
  attr_accessor :type
634
1398
 
1399
+ sig { returns(T.nilable(String)) }
1400
+ attr_reader :description
1401
+
1402
+ sig { params(description: String).void }
1403
+ attr_writer :description
1404
+
1405
+ sig { returns(T.nilable(T::Array[String])) }
1406
+ attr_reader :enum_options
1407
+
1408
+ sig { params(enum_options: T::Array[String]).void }
1409
+ attr_writer :enum_options
1410
+
635
1411
  sig do
636
1412
  params(
637
- name:
638
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::OrSymbol,
639
- type: Symbol
1413
+ name: String,
1414
+ required: T::Boolean,
1415
+ type:
1416
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::OrSymbol,
1417
+ description: String,
1418
+ enum_options: T::Array[String]
640
1419
  ).returns(T.attached_class)
641
1420
  end
642
- def self.new(name:, type: :"dedicated-instance")
1421
+ def self.new(
1422
+ name:,
1423
+ required:,
1424
+ type:,
1425
+ description: nil,
1426
+ enum_options: nil
1427
+ )
643
1428
  end
644
1429
 
645
1430
  sig do
646
1431
  override.returns(
647
1432
  {
648
- name:
649
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol,
650
- type: Symbol
1433
+ name: String,
1434
+ required: T::Boolean,
1435
+ type:
1436
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol,
1437
+ description: String,
1438
+ enum_options: T::Array[String]
651
1439
  }
652
1440
  )
653
1441
  end
654
1442
  def to_hash
655
1443
  end
656
1444
 
657
- module Name
1445
+ module Type
658
1446
  extend Revox::Internal::Type::Enum
659
1447
 
660
1448
  TaggedSymbol =
661
1449
  T.type_alias do
662
1450
  T.all(
663
1451
  Symbol,
664
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name
1452
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type
665
1453
  )
666
1454
  end
667
1455
  OrSymbol = T.type_alias { T.any(Symbol, String) }
668
1456
 
669
- GPT_4_1 =
1457
+ STRING =
670
1458
  T.let(
671
- :"gpt-4.1",
672
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1459
+ :string,
1460
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
673
1461
  )
674
- MINISTRAL_3_8B_INSTRUCT =
1462
+ NUMBER =
675
1463
  T.let(
676
- :"ministral-3-8b-instruct",
677
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1464
+ :number,
1465
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1466
+ )
1467
+ BOOLEAN =
1468
+ T.let(
1469
+ :boolean,
1470
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1471
+ )
1472
+ ENUM =
1473
+ T.let(
1474
+ :enum,
1475
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1476
+ )
1477
+ DATE =
1478
+ T.let(
1479
+ :date,
1480
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
1481
+ )
1482
+ DATETIME =
1483
+ T.let(
1484
+ :datetime,
1485
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
678
1486
  )
679
1487
 
680
1488
  sig do
681
1489
  override.returns(
682
1490
  T::Array[
683
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1491
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::InputSchema::Type::TaggedSymbol
684
1492
  ]
685
1493
  )
686
1494
  end
@@ -689,183 +1497,1459 @@ module Revox
689
1497
  end
690
1498
  end
691
1499
 
692
- class UnionMember1 < Revox::Internal::Type::BaseModel
693
- OrHash =
1500
+ # HTTP method to use when calling the API endpoint
1501
+ module Method
1502
+ extend Revox::Internal::Type::Enum
1503
+
1504
+ TaggedSymbol =
694
1505
  T.type_alias do
695
- T.any(
696
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember1,
697
- Revox::Internal::AnyHash
1506
+ T.all(
1507
+ Symbol,
1508
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method
698
1509
  )
699
1510
  end
1511
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
700
1512
 
701
- # The model ID to use from OpenRouter. eg: openai/gpt-4.1
702
- sig { returns(String) }
703
- attr_accessor :openrouter_model_id
704
-
705
- # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
706
- sig { returns(String) }
707
- attr_accessor :openrouter_provider
708
-
709
- # Use a model from OpenRouter.
710
- sig { returns(Symbol) }
1513
+ GET =
1514
+ T.let(
1515
+ :GET,
1516
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method::TaggedSymbol
1517
+ )
1518
+ POST =
1519
+ T.let(
1520
+ :POST,
1521
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method::TaggedSymbol
1522
+ )
1523
+ PUT =
1524
+ T.let(
1525
+ :PUT,
1526
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method::TaggedSymbol
1527
+ )
1528
+ PATCH =
1529
+ T.let(
1530
+ :PATCH,
1531
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method::TaggedSymbol
1532
+ )
1533
+ DELETE =
1534
+ T.let(
1535
+ :DELETE,
1536
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method::TaggedSymbol
1537
+ )
1538
+
1539
+ sig do
1540
+ override.returns(
1541
+ T::Array[
1542
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::Method::TaggedSymbol
1543
+ ]
1544
+ )
1545
+ end
1546
+ def self.values
1547
+ end
1548
+ end
1549
+
1550
+ class QueryParam < Revox::Internal::Type::BaseModel
1551
+ OrHash =
1552
+ T.type_alias do
1553
+ T.any(
1554
+ Revox::Models::AssistantCreateResponse::Assistant::CustomTool::QueryParam,
1555
+ Revox::Internal::AnyHash
1556
+ )
1557
+ end
1558
+
1559
+ sig { returns(String) }
1560
+ attr_accessor :key
1561
+
1562
+ sig { returns(String) }
1563
+ attr_accessor :value
1564
+
1565
+ sig { params(key: String, value: String).returns(T.attached_class) }
1566
+ def self.new(key:, value:)
1567
+ end
1568
+
1569
+ sig { override.returns({ key: String, value: String }) }
1570
+ def to_hash
1571
+ end
1572
+ end
1573
+ end
1574
+
1575
+ # The language used for the notification email content. One of "en" or "fr".
1576
+ module EmailNotificationLanguage
1577
+ extend Revox::Internal::Type::Enum
1578
+
1579
+ TaggedSymbol =
1580
+ T.type_alias do
1581
+ T.all(
1582
+ Symbol,
1583
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationLanguage
1584
+ )
1585
+ end
1586
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1587
+
1588
+ EN =
1589
+ T.let(
1590
+ :en,
1591
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
1592
+ )
1593
+ FR =
1594
+ T.let(
1595
+ :fr,
1596
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
1597
+ )
1598
+
1599
+ sig do
1600
+ override.returns(
1601
+ T::Array[
1602
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationLanguage::TaggedSymbol
1603
+ ]
1604
+ )
1605
+ end
1606
+ def self.values
1607
+ end
1608
+ end
1609
+
1610
+ module EmailNotificationOutcome
1611
+ extend Revox::Internal::Type::Enum
1612
+
1613
+ TaggedSymbol =
1614
+ T.type_alias do
1615
+ T.all(
1616
+ Symbol,
1617
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome
1618
+ )
1619
+ end
1620
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1621
+
1622
+ NOT_INTERESTED =
1623
+ T.let(
1624
+ :not_interested,
1625
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1626
+ )
1627
+ INTERESTED =
1628
+ T.let(
1629
+ :interested,
1630
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1631
+ )
1632
+ COMPLETED =
1633
+ T.let(
1634
+ :completed,
1635
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1636
+ )
1637
+ REQUESTED_CALLBACK_LATER =
1638
+ T.let(
1639
+ :requested_callback_later,
1640
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1641
+ )
1642
+ REQUESTED_CALLBACK_NEW_NUMBER =
1643
+ T.let(
1644
+ :requested_callback_new_number,
1645
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1646
+ )
1647
+ DO_NOT_CONTACT =
1648
+ T.let(
1649
+ :do_not_contact,
1650
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1651
+ )
1652
+ AI_AVERSE =
1653
+ T.let(
1654
+ :ai_averse,
1655
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1656
+ )
1657
+ NONE =
1658
+ T.let(
1659
+ :none,
1660
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1661
+ )
1662
+
1663
+ sig do
1664
+ override.returns(
1665
+ T::Array[
1666
+ Revox::Models::AssistantCreateResponse::Assistant::EmailNotificationOutcome::TaggedSymbol
1667
+ ]
1668
+ )
1669
+ end
1670
+ def self.values
1671
+ end
1672
+ end
1673
+
1674
+ module FirstSentenceMode
1675
+ extend Revox::Internal::Type::Enum
1676
+
1677
+ TaggedSymbol =
1678
+ T.type_alias do
1679
+ T.all(
1680
+ Symbol,
1681
+ Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode
1682
+ )
1683
+ end
1684
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1685
+
1686
+ GENERATED =
1687
+ T.let(
1688
+ :generated,
1689
+ Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::TaggedSymbol
1690
+ )
1691
+ STATIC =
1692
+ T.let(
1693
+ :static,
1694
+ Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::TaggedSymbol
1695
+ )
1696
+ NONE =
1697
+ T.let(
1698
+ :none,
1699
+ Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::TaggedSymbol
1700
+ )
1701
+
1702
+ sig do
1703
+ override.returns(
1704
+ T::Array[
1705
+ Revox::Models::AssistantCreateResponse::Assistant::FirstSentenceMode::TaggedSymbol
1706
+ ]
1707
+ )
1708
+ end
1709
+ def self.values
1710
+ end
1711
+ end
1712
+
1713
+ # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1714
+ # not configured.
1715
+ module HumanTransferMode
1716
+ extend Revox::Internal::Type::Enum
1717
+
1718
+ TaggedSymbol =
1719
+ T.type_alias do
1720
+ T.all(
1721
+ Symbol,
1722
+ Revox::Models::AssistantCreateResponse::Assistant::HumanTransferMode
1723
+ )
1724
+ end
1725
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1726
+
1727
+ WARM =
1728
+ T.let(
1729
+ :warm,
1730
+ Revox::Models::AssistantCreateResponse::Assistant::HumanTransferMode::TaggedSymbol
1731
+ )
1732
+ COLD =
1733
+ T.let(
1734
+ :cold,
1735
+ Revox::Models::AssistantCreateResponse::Assistant::HumanTransferMode::TaggedSymbol
1736
+ )
1737
+
1738
+ sig do
1739
+ override.returns(
1740
+ T::Array[
1741
+ Revox::Models::AssistantCreateResponse::Assistant::HumanTransferMode::TaggedSymbol
1742
+ ]
1743
+ )
1744
+ end
1745
+ def self.values
1746
+ end
1747
+ end
1748
+
1749
+ module LlmModel
1750
+ extend Revox::Internal::Type::Union
1751
+
1752
+ Variants =
1753
+ T.type_alias do
1754
+ T.any(
1755
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0,
1756
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember1,
1757
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember2,
1758
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3
1759
+ )
1760
+ end
1761
+
1762
+ class UnionMember0 < Revox::Internal::Type::BaseModel
1763
+ OrHash =
1764
+ T.type_alias do
1765
+ T.any(
1766
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0,
1767
+ Revox::Internal::AnyHash
1768
+ )
1769
+ end
1770
+
1771
+ sig do
1772
+ returns(
1773
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1774
+ )
1775
+ end
1776
+ attr_accessor :name
1777
+
1778
+ sig { returns(Symbol) }
711
1779
  attr_accessor :type
712
1780
 
713
1781
  sig do
714
1782
  params(
715
- openrouter_model_id: String,
716
- openrouter_provider: String,
1783
+ name:
1784
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::OrSymbol,
717
1785
  type: Symbol
718
1786
  ).returns(T.attached_class)
719
1787
  end
720
- def self.new(
721
- # The model ID to use from OpenRouter. eg: openai/gpt-4.1
722
- openrouter_model_id:,
723
- # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
724
- openrouter_provider:,
725
- # Use a model from OpenRouter.
726
- type: :openrouter
727
- )
1788
+ def self.new(name:, type: :"dedicated-instance")
728
1789
  end
729
1790
 
730
1791
  sig do
731
1792
  override.returns(
732
1793
  {
733
- openrouter_model_id: String,
734
- openrouter_provider: String,
1794
+ name:
1795
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol,
735
1796
  type: Symbol
736
1797
  }
737
1798
  )
738
1799
  end
739
1800
  def to_hash
740
1801
  end
1802
+
1803
+ module Name
1804
+ extend Revox::Internal::Type::Enum
1805
+
1806
+ TaggedSymbol =
1807
+ T.type_alias do
1808
+ T.all(
1809
+ Symbol,
1810
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name
1811
+ )
1812
+ end
1813
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1814
+
1815
+ GPT_4_1 =
1816
+ T.let(
1817
+ :"gpt-4.1",
1818
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1819
+ )
1820
+ MINISTRAL_3_8B_INSTRUCT =
1821
+ T.let(
1822
+ :"ministral-3-8b-instruct",
1823
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1824
+ )
1825
+
1826
+ sig do
1827
+ override.returns(
1828
+ T::Array[
1829
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember0::Name::TaggedSymbol
1830
+ ]
1831
+ )
1832
+ end
1833
+ def self.values
1834
+ end
1835
+ end
741
1836
  end
742
1837
 
1838
+ class UnionMember1 < Revox::Internal::Type::BaseModel
1839
+ OrHash =
1840
+ T.type_alias do
1841
+ T.any(
1842
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember1,
1843
+ Revox::Internal::AnyHash
1844
+ )
1845
+ end
1846
+
1847
+ # The model ID to use from OpenRouter. eg: openai/gpt-4.1
1848
+ sig { returns(String) }
1849
+ attr_accessor :openrouter_model_id
1850
+
1851
+ # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
1852
+ sig { returns(String) }
1853
+ attr_accessor :openrouter_provider
1854
+
1855
+ # Use a model from OpenRouter.
1856
+ sig { returns(Symbol) }
1857
+ attr_accessor :type
1858
+
1859
+ sig do
1860
+ params(
1861
+ openrouter_model_id: String,
1862
+ openrouter_provider: String,
1863
+ type: Symbol
1864
+ ).returns(T.attached_class)
1865
+ end
1866
+ def self.new(
1867
+ # The model ID to use from OpenRouter. eg: openai/gpt-4.1
1868
+ openrouter_model_id:,
1869
+ # The provider to use from OpenRouter. eg: nebius, openai, azure, etc.
1870
+ openrouter_provider:,
1871
+ # Use a model from OpenRouter.
1872
+ type: :openrouter
1873
+ )
1874
+ end
1875
+
1876
+ sig do
1877
+ override.returns(
1878
+ {
1879
+ openrouter_model_id: String,
1880
+ openrouter_provider: String,
1881
+ type: Symbol
1882
+ }
1883
+ )
1884
+ end
1885
+ def to_hash
1886
+ end
1887
+ end
1888
+
1889
+ class UnionMember2 < Revox::Internal::Type::BaseModel
1890
+ OrHash =
1891
+ T.type_alias do
1892
+ T.any(
1893
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember2,
1894
+ Revox::Internal::AnyHash
1895
+ )
1896
+ end
1897
+
1898
+ # API key sent as Bearer token to the custom endpoint.
1899
+ sig { returns(String) }
1900
+ attr_accessor :api_key
1901
+
1902
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
1903
+ sig { returns(String) }
1904
+ attr_accessor :api_url
1905
+
1906
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
1907
+ sig { returns(String) }
1908
+ attr_accessor :model_name
1909
+
1910
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
1911
+ sig { returns(Symbol) }
1912
+ attr_accessor :type
1913
+
1914
+ sig do
1915
+ params(
1916
+ api_key: String,
1917
+ api_url: String,
1918
+ model_name: String,
1919
+ type: Symbol
1920
+ ).returns(T.attached_class)
1921
+ end
1922
+ def self.new(
1923
+ # API key sent as Bearer token to the custom endpoint.
1924
+ api_key:,
1925
+ # Base URL for the OpenAI-compatible API, e.g. https://api.together.xyz/v1
1926
+ api_url:,
1927
+ # Model name as expected by the provider, e.g. meta-llama/llama-3-70b
1928
+ model_name:,
1929
+ # OpenAI-compatible chat completions API (bring your own endpoint and key).
1930
+ type: :custom
1931
+ )
1932
+ end
1933
+
1934
+ sig do
1935
+ override.returns(
1936
+ {
1937
+ api_key: String,
1938
+ api_url: String,
1939
+ model_name: String,
1940
+ type: Symbol
1941
+ }
1942
+ )
1943
+ end
1944
+ def to_hash
1945
+ end
1946
+ end
1947
+
1948
+ class UnionMember3 < Revox::Internal::Type::BaseModel
1949
+ OrHash =
1950
+ T.type_alias do
1951
+ T.any(
1952
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3,
1953
+ Revox::Internal::AnyHash
1954
+ )
1955
+ end
1956
+
1957
+ # The provider to use from Realtime. eg: openai, google.
1958
+ sig do
1959
+ returns(
1960
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
1961
+ )
1962
+ end
1963
+ attr_accessor :provider
1964
+
1965
+ # The model ID to use from Realtime. eg: gpt-4.1
1966
+ sig { returns(String) }
1967
+ attr_accessor :realtime_model_id
1968
+
1969
+ # Use a model from Realtime.
1970
+ sig { returns(Symbol) }
1971
+ attr_accessor :type
1972
+
1973
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
1974
+ sig { returns(T.nilable(String)) }
1975
+ attr_reader :realtime_voice_id
1976
+
1977
+ sig { params(realtime_voice_id: String).void }
1978
+ attr_writer :realtime_voice_id
1979
+
1980
+ sig do
1981
+ params(
1982
+ provider:
1983
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3::Provider::OrSymbol,
1984
+ realtime_model_id: String,
1985
+ realtime_voice_id: String,
1986
+ type: Symbol
1987
+ ).returns(T.attached_class)
1988
+ end
1989
+ def self.new(
1990
+ # The provider to use from Realtime. eg: openai, google.
1991
+ provider:,
1992
+ # The model ID to use from Realtime. eg: gpt-4.1
1993
+ realtime_model_id:,
1994
+ # Output voice for the realtime provider (e.g. OpenAI: marin; Gemini: Puck).
1995
+ realtime_voice_id: nil,
1996
+ # Use a model from Realtime.
1997
+ type: :realtime
1998
+ )
1999
+ end
2000
+
2001
+ sig do
2002
+ override.returns(
2003
+ {
2004
+ provider:
2005
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol,
2006
+ realtime_model_id: String,
2007
+ type: Symbol,
2008
+ realtime_voice_id: String
2009
+ }
2010
+ )
2011
+ end
2012
+ def to_hash
2013
+ end
2014
+
2015
+ # The provider to use from Realtime. eg: openai, google.
2016
+ module Provider
2017
+ extend Revox::Internal::Type::Enum
2018
+
2019
+ TaggedSymbol =
2020
+ T.type_alias do
2021
+ T.all(
2022
+ Symbol,
2023
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3::Provider
2024
+ )
2025
+ end
2026
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2027
+
2028
+ OPENAI =
2029
+ T.let(
2030
+ :openai,
2031
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2032
+ )
2033
+ GOOGLE =
2034
+ T.let(
2035
+ :google,
2036
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2037
+ )
2038
+
2039
+ sig do
2040
+ override.returns(
2041
+ T::Array[
2042
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::UnionMember3::Provider::TaggedSymbol
2043
+ ]
2044
+ )
2045
+ end
2046
+ def self.values
2047
+ end
2048
+ end
2049
+ end
2050
+
2051
+ sig do
2052
+ override.returns(
2053
+ T::Array[
2054
+ Revox::Models::AssistantCreateResponse::Assistant::LlmModel::Variants
2055
+ ]
2056
+ )
2057
+ end
2058
+ def self.variants
2059
+ end
2060
+ end
2061
+
2062
+ class Position < Revox::Internal::Type::BaseModel
2063
+ OrHash =
2064
+ T.type_alias do
2065
+ T.any(
2066
+ Revox::Models::AssistantCreateResponse::Assistant::Position,
2067
+ Revox::Internal::AnyHash
2068
+ )
2069
+ end
2070
+
2071
+ sig { returns(Float) }
2072
+ attr_accessor :x
2073
+
2074
+ sig { returns(Float) }
2075
+ attr_accessor :y_
2076
+
2077
+ sig { params(x: Float, y_: Float).returns(T.attached_class) }
2078
+ def self.new(x:, y_:)
2079
+ end
2080
+
2081
+ sig { override.returns({ x: Float, y_: Float }) }
2082
+ def to_hash
2083
+ end
2084
+ end
2085
+
2086
+ class PromptFlow < Revox::Internal::Type::BaseModel
2087
+ OrHash =
2088
+ T.type_alias do
2089
+ T.any(
2090
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow,
2091
+ Revox::Internal::AnyHash
2092
+ )
2093
+ end
2094
+
2095
+ sig do
2096
+ returns(
2097
+ T::Array[
2098
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Edge
2099
+ ]
2100
+ )
2101
+ end
2102
+ attr_accessor :edges
2103
+
2104
+ sig do
2105
+ returns(
2106
+ T::Array[
2107
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node
2108
+ ]
2109
+ )
2110
+ end
2111
+ attr_accessor :nodes
2112
+
2113
+ sig do
2114
+ params(
2115
+ edges:
2116
+ T::Array[
2117
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Edge::OrHash
2118
+ ],
2119
+ nodes:
2120
+ T::Array[
2121
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::OrHash
2122
+ ]
2123
+ ).returns(T.attached_class)
2124
+ end
2125
+ def self.new(edges:, nodes:)
2126
+ end
2127
+
2128
+ sig do
2129
+ override.returns(
2130
+ {
2131
+ edges:
2132
+ T::Array[
2133
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Edge
2134
+ ],
2135
+ nodes:
2136
+ T::Array[
2137
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node
2138
+ ]
2139
+ }
2140
+ )
2141
+ end
2142
+ def to_hash
2143
+ end
2144
+
2145
+ class Edge < Revox::Internal::Type::BaseModel
2146
+ OrHash =
2147
+ T.type_alias do
2148
+ T.any(
2149
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Edge,
2150
+ Revox::Internal::AnyHash
2151
+ )
2152
+ end
2153
+
2154
+ sig { returns(String) }
2155
+ attr_accessor :id
2156
+
2157
+ sig { returns(String) }
2158
+ attr_accessor :source
2159
+
2160
+ sig { returns(String) }
2161
+ attr_accessor :target
2162
+
2163
+ sig do
2164
+ params(id: String, source: String, target: String).returns(
2165
+ T.attached_class
2166
+ )
2167
+ end
2168
+ def self.new(id:, source:, target:)
2169
+ end
2170
+
2171
+ sig do
2172
+ override.returns({ id: String, source: String, target: String })
2173
+ end
2174
+ def to_hash
2175
+ end
2176
+ end
2177
+
2178
+ class Node < Revox::Internal::Type::BaseModel
2179
+ OrHash =
2180
+ T.type_alias do
2181
+ T.any(
2182
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node,
2183
+ Revox::Internal::AnyHash
2184
+ )
2185
+ end
2186
+
2187
+ sig { returns(String) }
2188
+ attr_accessor :id
2189
+
2190
+ sig do
2191
+ returns(
2192
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Data
2193
+ )
2194
+ end
2195
+ attr_reader :data
2196
+
2197
+ sig do
2198
+ params(
2199
+ data:
2200
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Data::OrHash
2201
+ ).void
2202
+ end
2203
+ attr_writer :data
2204
+
2205
+ sig do
2206
+ returns(
2207
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Position
2208
+ )
2209
+ end
2210
+ attr_reader :position
2211
+
2212
+ sig do
2213
+ params(
2214
+ position:
2215
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Position::OrHash
2216
+ ).void
2217
+ end
2218
+ attr_writer :position
2219
+
2220
+ sig { returns(Symbol) }
2221
+ attr_accessor :type
2222
+
2223
+ sig do
2224
+ params(
2225
+ id: String,
2226
+ data:
2227
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Data::OrHash,
2228
+ position:
2229
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Position::OrHash,
2230
+ type: Symbol
2231
+ ).returns(T.attached_class)
2232
+ end
2233
+ def self.new(id:, data:, position:, type: :promptBlock)
2234
+ end
2235
+
2236
+ sig do
2237
+ override.returns(
2238
+ {
2239
+ id: String,
2240
+ data:
2241
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Data,
2242
+ position:
2243
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Position,
2244
+ type: Symbol
2245
+ }
2246
+ )
2247
+ end
2248
+ def to_hash
2249
+ end
2250
+
2251
+ class Data < Revox::Internal::Type::BaseModel
2252
+ OrHash =
2253
+ T.type_alias do
2254
+ T.any(
2255
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Data,
2256
+ Revox::Internal::AnyHash
2257
+ )
2258
+ end
2259
+
2260
+ sig { returns(String) }
2261
+ attr_accessor :body
2262
+
2263
+ sig { returns(String) }
2264
+ attr_accessor :title
2265
+
2266
+ sig do
2267
+ params(body: String, title: String).returns(T.attached_class)
2268
+ end
2269
+ def self.new(body:, title:)
2270
+ end
2271
+
2272
+ sig { override.returns({ body: String, title: String }) }
2273
+ def to_hash
2274
+ end
2275
+ end
2276
+
2277
+ class Position < Revox::Internal::Type::BaseModel
2278
+ OrHash =
2279
+ T.type_alias do
2280
+ T.any(
2281
+ Revox::Models::AssistantCreateResponse::Assistant::PromptFlow::Node::Position,
2282
+ Revox::Internal::AnyHash
2283
+ )
2284
+ end
2285
+
2286
+ sig { returns(Float) }
2287
+ attr_accessor :x
2288
+
2289
+ sig { returns(Float) }
2290
+ attr_accessor :y_
2291
+
2292
+ sig { params(x: Float, y_: Float).returns(T.attached_class) }
2293
+ def self.new(x:, y_:)
2294
+ end
2295
+
2296
+ sig { override.returns({ x: Float, y_: Float }) }
2297
+ def to_hash
2298
+ end
2299
+ end
2300
+ end
2301
+ end
2302
+
2303
+ class Slack < Revox::Internal::Type::BaseModel
2304
+ OrHash =
2305
+ T.type_alias do
2306
+ T.any(
2307
+ Revox::Models::AssistantCreateResponse::Assistant::Slack,
2308
+ Revox::Internal::AnyHash
2309
+ )
2310
+ end
2311
+
2312
+ # The Slack channel ID where the notification will be posted.
2313
+ sig { returns(String) }
2314
+ attr_accessor :channel_id
2315
+
2316
+ # The Nango connection ID linking the org's Slack workspace to Revox.
2317
+ sig { returns(String) }
2318
+ attr_accessor :connection_id
2319
+
2320
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2321
+ # Use 'none' to notify when outcome is null.
2322
+ sig do
2323
+ returns(
2324
+ T::Array[
2325
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2326
+ ]
2327
+ )
2328
+ end
2329
+ attr_accessor :outcomes
2330
+
2331
+ # Human-readable Slack channel name, cached for display in the UI.
2332
+ sig { returns(T.nilable(String)) }
2333
+ attr_accessor :channel_name
2334
+
2335
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2336
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2337
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2338
+ # prompt_variables and structured_output keys. When null/empty a default template
2339
+ # is used.
2340
+ sig { returns(T.nilable(String)) }
2341
+ attr_accessor :template
2342
+
2343
+ sig do
2344
+ params(
2345
+ channel_id: String,
2346
+ connection_id: String,
2347
+ outcomes:
2348
+ T::Array[
2349
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::OrSymbol
2350
+ ],
2351
+ channel_name: T.nilable(String),
2352
+ template: T.nilable(String)
2353
+ ).returns(T.attached_class)
2354
+ end
2355
+ def self.new(
2356
+ # The Slack channel ID where the notification will be posted.
2357
+ channel_id:,
2358
+ # The Nango connection ID linking the org's Slack workspace to Revox.
2359
+ connection_id:,
2360
+ # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2361
+ # Use 'none' to notify when outcome is null.
2362
+ outcomes:,
2363
+ # Human-readable Slack channel name, cached for display in the UI.
2364
+ channel_name: nil,
2365
+ # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2366
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2367
+ # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2368
+ # prompt_variables and structured_output keys. When null/empty a default template
2369
+ # is used.
2370
+ template: nil
2371
+ )
2372
+ end
2373
+
2374
+ sig do
2375
+ override.returns(
2376
+ {
2377
+ channel_id: String,
2378
+ connection_id: String,
2379
+ outcomes:
2380
+ T::Array[
2381
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2382
+ ],
2383
+ channel_name: T.nilable(String),
2384
+ template: T.nilable(String)
2385
+ }
2386
+ )
2387
+ end
2388
+ def to_hash
2389
+ end
2390
+
2391
+ module Outcome
2392
+ extend Revox::Internal::Type::Enum
2393
+
2394
+ TaggedSymbol =
2395
+ T.type_alias do
2396
+ T.all(
2397
+ Symbol,
2398
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome
2399
+ )
2400
+ end
2401
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2402
+
2403
+ NOT_INTERESTED =
2404
+ T.let(
2405
+ :not_interested,
2406
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2407
+ )
2408
+ INTERESTED =
2409
+ T.let(
2410
+ :interested,
2411
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2412
+ )
2413
+ COMPLETED =
2414
+ T.let(
2415
+ :completed,
2416
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2417
+ )
2418
+ REQUESTED_CALLBACK_LATER =
2419
+ T.let(
2420
+ :requested_callback_later,
2421
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2422
+ )
2423
+ REQUESTED_CALLBACK_NEW_NUMBER =
2424
+ T.let(
2425
+ :requested_callback_new_number,
2426
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2427
+ )
2428
+ DO_NOT_CONTACT =
2429
+ T.let(
2430
+ :do_not_contact,
2431
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2432
+ )
2433
+ AI_AVERSE =
2434
+ T.let(
2435
+ :ai_averse,
2436
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2437
+ )
2438
+ NONE =
2439
+ T.let(
2440
+ :none,
2441
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2442
+ )
2443
+
2444
+ sig do
2445
+ override.returns(
2446
+ T::Array[
2447
+ Revox::Models::AssistantCreateResponse::Assistant::Slack::Outcome::TaggedSymbol
2448
+ ]
2449
+ )
2450
+ end
2451
+ def self.values
2452
+ end
2453
+ end
2454
+ end
2455
+
2456
+ class StructuredOutputConfig < Revox::Internal::Type::BaseModel
2457
+ OrHash =
2458
+ T.type_alias do
2459
+ T.any(
2460
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig,
2461
+ Revox::Internal::AnyHash
2462
+ )
2463
+ end
2464
+
2465
+ sig { returns(String) }
2466
+ attr_accessor :name
2467
+
2468
+ sig { returns(T::Boolean) }
2469
+ attr_accessor :required
2470
+
2471
+ sig do
2472
+ returns(
2473
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2474
+ )
2475
+ end
2476
+ attr_accessor :type
2477
+
2478
+ sig { returns(T.nilable(String)) }
2479
+ attr_reader :description
2480
+
2481
+ sig { params(description: String).void }
2482
+ attr_writer :description
2483
+
2484
+ sig { returns(T.nilable(T::Array[String])) }
2485
+ attr_reader :enum_options
2486
+
2487
+ sig { params(enum_options: T::Array[String]).void }
2488
+ attr_writer :enum_options
2489
+
2490
+ sig do
2491
+ params(
2492
+ name: String,
2493
+ required: T::Boolean,
2494
+ type:
2495
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::OrSymbol,
2496
+ description: String,
2497
+ enum_options: T::Array[String]
2498
+ ).returns(T.attached_class)
2499
+ end
2500
+ def self.new(
2501
+ name:,
2502
+ required:,
2503
+ type:,
2504
+ description: nil,
2505
+ enum_options: nil
2506
+ )
2507
+ end
2508
+
2509
+ sig do
2510
+ override.returns(
2511
+ {
2512
+ name: String,
2513
+ required: T::Boolean,
2514
+ type:
2515
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol,
2516
+ description: String,
2517
+ enum_options: T::Array[String]
2518
+ }
2519
+ )
2520
+ end
2521
+ def to_hash
2522
+ end
2523
+
2524
+ module Type
2525
+ extend Revox::Internal::Type::Enum
2526
+
2527
+ TaggedSymbol =
2528
+ T.type_alias do
2529
+ T.all(
2530
+ Symbol,
2531
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type
2532
+ )
2533
+ end
2534
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2535
+
2536
+ STRING =
2537
+ T.let(
2538
+ :string,
2539
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2540
+ )
2541
+ NUMBER =
2542
+ T.let(
2543
+ :number,
2544
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2545
+ )
2546
+ BOOLEAN =
2547
+ T.let(
2548
+ :boolean,
2549
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2550
+ )
2551
+ ENUM =
2552
+ T.let(
2553
+ :enum,
2554
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2555
+ )
2556
+ DATE =
2557
+ T.let(
2558
+ :date,
2559
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2560
+ )
2561
+ DATETIME =
2562
+ T.let(
2563
+ :datetime,
2564
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2565
+ )
2566
+
2567
+ sig do
2568
+ override.returns(
2569
+ T::Array[
2570
+ Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2571
+ ]
2572
+ )
2573
+ end
2574
+ def self.values
2575
+ end
2576
+ end
2577
+ end
2578
+
2579
+ class SttContext < Revox::Internal::Type::BaseModel
2580
+ OrHash =
2581
+ T.type_alias do
2582
+ T.any(
2583
+ Revox::Models::AssistantCreateResponse::Assistant::SttContext,
2584
+ Revox::Internal::AnyHash
2585
+ )
2586
+ end
2587
+
2588
+ sig do
2589
+ returns(
2590
+ T::Array[
2591
+ Revox::Models::AssistantCreateResponse::Assistant::SttContext::General
2592
+ ]
2593
+ )
2594
+ end
2595
+ attr_accessor :general
2596
+
2597
+ sig { returns(T::Array[String]) }
2598
+ attr_accessor :terms
2599
+
2600
+ # Assistant-level speech-to-text context: structured `general` key/value pairs
2601
+ # plus a list of domain `terms`. Prompt-derived context is merged in without
2602
+ # replacing existing entries.
2603
+ sig do
2604
+ params(
2605
+ general:
2606
+ T::Array[
2607
+ Revox::Models::AssistantCreateResponse::Assistant::SttContext::General::OrHash
2608
+ ],
2609
+ terms: T::Array[String]
2610
+ ).returns(T.attached_class)
2611
+ end
2612
+ def self.new(general:, terms:)
2613
+ end
2614
+
2615
+ sig do
2616
+ override.returns(
2617
+ {
2618
+ general:
2619
+ T::Array[
2620
+ Revox::Models::AssistantCreateResponse::Assistant::SttContext::General
2621
+ ],
2622
+ terms: T::Array[String]
2623
+ }
2624
+ )
2625
+ end
2626
+ def to_hash
2627
+ end
2628
+
2629
+ class General < Revox::Internal::Type::BaseModel
2630
+ OrHash =
2631
+ T.type_alias do
2632
+ T.any(
2633
+ Revox::Models::AssistantCreateResponse::Assistant::SttContext::General,
2634
+ Revox::Internal::AnyHash
2635
+ )
2636
+ end
2637
+
2638
+ sig { returns(String) }
2639
+ attr_accessor :key
2640
+
2641
+ sig { returns(String) }
2642
+ attr_accessor :value
2643
+
2644
+ sig { params(key: String, value: String).returns(T.attached_class) }
2645
+ def self.new(key:, value:)
2646
+ end
2647
+
2648
+ sig { override.returns({ key: String, value: String }) }
2649
+ def to_hash
2650
+ end
2651
+ end
2652
+ end
2653
+
2654
+ # Transcriber (speech-to-text) model used for the assistant.
2655
+ module SttModel
2656
+ extend Revox::Internal::Type::Enum
2657
+
2658
+ TaggedSymbol =
2659
+ T.type_alias do
2660
+ T.all(
2661
+ Symbol,
2662
+ Revox::Models::AssistantCreateResponse::Assistant::SttModel
2663
+ )
2664
+ end
2665
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2666
+
2667
+ STT_RT_V4 =
2668
+ T.let(
2669
+ :"stt-rt-v4",
2670
+ Revox::Models::AssistantCreateResponse::Assistant::SttModel::TaggedSymbol
2671
+ )
2672
+ STT_RT_V5 =
2673
+ T.let(
2674
+ :"stt-rt-v5",
2675
+ Revox::Models::AssistantCreateResponse::Assistant::SttModel::TaggedSymbol
2676
+ )
2677
+
2678
+ sig do
2679
+ override.returns(
2680
+ T::Array[
2681
+ Revox::Models::AssistantCreateResponse::Assistant::SttModel::TaggedSymbol
2682
+ ]
2683
+ )
2684
+ end
2685
+ def self.values
2686
+ end
2687
+ end
2688
+
2689
+ # Audio clip to play while the agent is processing a response. One of the built-in
2690
+ # LiveKit audio clips; null disables it.
2691
+ module ThinkingSound
2692
+ extend Revox::Internal::Type::Enum
2693
+
2694
+ TaggedSymbol =
2695
+ T.type_alias do
2696
+ T.all(
2697
+ Symbol,
2698
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound
2699
+ )
2700
+ end
2701
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2702
+
2703
+ CITY_AMBIENCE_OGG =
2704
+ T.let(
2705
+ :"city-ambience.ogg",
2706
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
2707
+ )
2708
+ FOREST_AMBIENCE_OGG =
2709
+ T.let(
2710
+ :"forest-ambience.ogg",
2711
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
2712
+ )
2713
+ OFFICE_AMBIENCE_OGG =
2714
+ T.let(
2715
+ :"office-ambience.ogg",
2716
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
2717
+ )
2718
+ CROWDED_ROOM_OGG =
2719
+ T.let(
2720
+ :"crowded-room.ogg",
2721
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
2722
+ )
2723
+ KEYBOARD_TYPING_OGG =
2724
+ T.let(
2725
+ :"keyboard-typing.ogg",
2726
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
2727
+ )
2728
+ KEYBOARD_TYPING2_OGG =
2729
+ T.let(
2730
+ :"keyboard-typing2.ogg",
2731
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
2732
+ )
2733
+ HOLD_MUSIC_OGG =
2734
+ T.let(
2735
+ :"hold_music.ogg",
2736
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
2737
+ )
2738
+
2739
+ sig do
2740
+ override.returns(
2741
+ T::Array[
2742
+ Revox::Models::AssistantCreateResponse::Assistant::ThinkingSound::TaggedSymbol
2743
+ ]
2744
+ )
2745
+ end
2746
+ def self.values
2747
+ end
2748
+ end
2749
+
2750
+ module Type
2751
+ extend Revox::Internal::Type::Enum
2752
+
2753
+ TaggedSymbol =
2754
+ T.type_alias do
2755
+ T.all(
2756
+ Symbol,
2757
+ Revox::Models::AssistantCreateResponse::Assistant::Type
2758
+ )
2759
+ end
2760
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2761
+
2762
+ STANDALONE =
2763
+ T.let(
2764
+ :standalone,
2765
+ Revox::Models::AssistantCreateResponse::Assistant::Type::TaggedSymbol
2766
+ )
2767
+ MULTI_STEP =
2768
+ T.let(
2769
+ :"multi-step",
2770
+ Revox::Models::AssistantCreateResponse::Assistant::Type::TaggedSymbol
2771
+ )
2772
+ SUB_ASSISTANT =
2773
+ T.let(
2774
+ :"sub-assistant",
2775
+ Revox::Models::AssistantCreateResponse::Assistant::Type::TaggedSymbol
2776
+ )
2777
+
743
2778
  sig do
744
2779
  override.returns(
745
2780
  T::Array[
746
- Revox::Models::AssistantCreateResponse::Assistant::LlmModel::Variants
2781
+ Revox::Models::AssistantCreateResponse::Assistant::Type::TaggedSymbol
747
2782
  ]
748
2783
  )
749
2784
  end
750
- def self.variants
2785
+ def self.values
751
2786
  end
752
2787
  end
753
2788
 
754
- class StructuredOutputConfig < Revox::Internal::Type::BaseModel
2789
+ class Voice < Revox::Internal::Type::BaseModel
755
2790
  OrHash =
756
2791
  T.type_alias do
757
2792
  T.any(
758
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig,
2793
+ Revox::Models::AssistantCreateResponse::Assistant::Voice,
759
2794
  Revox::Internal::AnyHash
760
2795
  )
761
2796
  end
762
2797
 
2798
+ # The ID of the voice.
763
2799
  sig { returns(String) }
764
- attr_accessor :name
2800
+ attr_accessor :id
765
2801
 
766
- sig { returns(T::Boolean) }
767
- attr_accessor :required
2802
+ # The provider of the voice.
2803
+ sig do
2804
+ returns(
2805
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol
2806
+ )
2807
+ end
2808
+ attr_accessor :provider
768
2809
 
2810
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
2811
+ # for other providers.
769
2812
  sig do
770
2813
  returns(
771
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2814
+ T.nilable(
2815
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Model::TaggedSymbol
2816
+ )
772
2817
  )
773
2818
  end
774
- attr_accessor :type
2819
+ attr_reader :model
775
2820
 
776
- sig { returns(T.nilable(String)) }
777
- attr_reader :description
2821
+ sig do
2822
+ params(
2823
+ model:
2824
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Model::OrSymbol
2825
+ ).void
2826
+ end
2827
+ attr_writer :model
778
2828
 
779
- sig { params(description: String).void }
780
- attr_writer :description
2829
+ # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
2830
+ # 0.7–1.2. Default is 1.0.
2831
+ sig { returns(T.nilable(Float)) }
2832
+ attr_reader :speed
781
2833
 
782
- sig { returns(T.nilable(T::Array[String])) }
783
- attr_reader :enum_options
2834
+ sig { params(speed: Float).void }
2835
+ attr_writer :speed
784
2836
 
785
- sig { params(enum_options: T::Array[String]).void }
786
- attr_writer :enum_options
2837
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
2838
+ # providers.
2839
+ sig { returns(T.nilable(Float)) }
2840
+ attr_reader :volume
2841
+
2842
+ sig { params(volume: Float).void }
2843
+ attr_writer :volume
787
2844
 
788
2845
  sig do
789
2846
  params(
790
- name: String,
791
- required: T::Boolean,
792
- type:
793
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::OrSymbol,
794
- description: String,
795
- enum_options: T::Array[String]
2847
+ id: String,
2848
+ provider:
2849
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::OrSymbol,
2850
+ model:
2851
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Model::OrSymbol,
2852
+ speed: Float,
2853
+ volume: Float
796
2854
  ).returns(T.attached_class)
797
2855
  end
798
2856
  def self.new(
799
- name:,
800
- required:,
801
- type:,
802
- description: nil,
803
- enum_options: nil
2857
+ # The ID of the voice.
2858
+ id:,
2859
+ # The provider of the voice.
2860
+ provider:,
2861
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
2862
+ # for other providers.
2863
+ model: nil,
2864
+ # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
2865
+ # 0.7–1.2. Default is 1.0.
2866
+ speed: nil,
2867
+ # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
2868
+ # providers.
2869
+ volume: nil
804
2870
  )
805
2871
  end
806
2872
 
807
2873
  sig do
808
2874
  override.returns(
809
2875
  {
810
- name: String,
811
- required: T::Boolean,
812
- type:
813
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol,
814
- description: String,
815
- enum_options: T::Array[String]
2876
+ id: String,
2877
+ provider:
2878
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol,
2879
+ model:
2880
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Model::TaggedSymbol,
2881
+ speed: Float,
2882
+ volume: Float
816
2883
  }
817
2884
  )
818
2885
  end
819
2886
  def to_hash
820
2887
  end
821
2888
 
822
- module Type
2889
+ # The provider of the voice.
2890
+ module Provider
823
2891
  extend Revox::Internal::Type::Enum
824
2892
 
825
2893
  TaggedSymbol =
826
2894
  T.type_alias do
827
2895
  T.all(
828
2896
  Symbol,
829
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type
2897
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider
830
2898
  )
831
2899
  end
832
2900
  OrSymbol = T.type_alias { T.any(Symbol, String) }
833
2901
 
834
- STRING =
835
- T.let(
836
- :string,
837
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
838
- )
839
- NUMBER =
2902
+ CARTESIA =
840
2903
  T.let(
841
- :number,
842
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2904
+ :cartesia,
2905
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol
843
2906
  )
844
- BOOLEAN =
2907
+ ELEVENLABS =
845
2908
  T.let(
846
- :boolean,
847
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2909
+ :elevenlabs,
2910
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol
848
2911
  )
849
- ENUM =
850
- T.let(
851
- :enum,
852
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2912
+
2913
+ sig do
2914
+ override.returns(
2915
+ T::Array[
2916
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol
2917
+ ]
853
2918
  )
854
- DATE =
2919
+ end
2920
+ def self.values
2921
+ end
2922
+ end
2923
+
2924
+ # Cartesia TTS model (Cartesia only). Defaults to sonic-3 when omitted. Ignored
2925
+ # for other providers.
2926
+ module Model
2927
+ extend Revox::Internal::Type::Enum
2928
+
2929
+ TaggedSymbol =
2930
+ T.type_alias do
2931
+ T.all(
2932
+ Symbol,
2933
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Model
2934
+ )
2935
+ end
2936
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
2937
+
2938
+ SONIC_3 =
855
2939
  T.let(
856
- :date,
857
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2940
+ :"sonic-3",
2941
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Model::TaggedSymbol
858
2942
  )
859
- DATETIME =
2943
+ SONIC_3_5 =
860
2944
  T.let(
861
- :datetime,
862
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2945
+ :"sonic-3.5",
2946
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Model::TaggedSymbol
863
2947
  )
864
2948
 
865
2949
  sig do
866
2950
  override.returns(
867
2951
  T::Array[
868
- Revox::Models::AssistantCreateResponse::Assistant::StructuredOutputConfig::Type::TaggedSymbol
2952
+ Revox::Models::AssistantCreateResponse::Assistant::Voice::Model::TaggedSymbol
869
2953
  ]
870
2954
  )
871
2955
  end
@@ -874,95 +2958,212 @@ module Revox
874
2958
  end
875
2959
  end
876
2960
 
877
- class Voice < Revox::Internal::Type::BaseModel
2961
+ class Zoho < Revox::Internal::Type::BaseModel
878
2962
  OrHash =
879
2963
  T.type_alias do
880
2964
  T.any(
881
- Revox::Models::AssistantCreateResponse::Assistant::Voice,
2965
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho,
882
2966
  Revox::Internal::AnyHash
883
2967
  )
884
2968
  end
885
2969
 
886
- # The ID of the voice.
2970
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
887
2971
  sig { returns(String) }
888
- attr_accessor :id
2972
+ attr_accessor :connection_id
889
2973
 
890
- # The provider of the voice.
2974
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
2975
+ # field API names on the upserted record.
891
2976
  sig do
892
2977
  returns(
893
- Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol
2978
+ T::Array[
2979
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::FieldMapping
2980
+ ]
894
2981
  )
895
2982
  end
896
- attr_accessor :provider
2983
+ attr_accessor :field_mapping
897
2984
 
898
- # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
899
- # 0.7–1.2. Default is 1.0.
900
- sig { returns(T.nilable(Float)) }
901
- attr_reader :speed
2985
+ # When true, also log the call as a record in Zoho's Calls module (related to the
2986
+ # upserted prospect via Who_Id).
2987
+ sig { returns(T::Boolean) }
2988
+ attr_accessor :log_call_activity
902
2989
 
903
- sig { params(speed: Float).void }
904
- attr_writer :speed
2990
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
2991
+ sig { returns(String) }
2992
+ attr_accessor :module_
2993
+
2994
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
2995
+ # 'none' to push when outcome is null.
2996
+ sig do
2997
+ returns(
2998
+ T::Array[
2999
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
3000
+ ]
3001
+ )
3002
+ end
3003
+ attr_accessor :outcomes
3004
+
3005
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
3006
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
3007
+ # prompt_variables and structured_output keys. When null/empty a default note
3008
+ # (outcome + summary + auto-listed extracted fields) is used.
3009
+ sig { returns(T.nilable(String)) }
3010
+ attr_accessor :template
905
3011
 
906
3012
  sig do
907
3013
  params(
908
- id: String,
909
- provider:
910
- Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::OrSymbol,
911
- speed: Float
3014
+ connection_id: String,
3015
+ field_mapping:
3016
+ T::Array[
3017
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::FieldMapping::OrHash
3018
+ ],
3019
+ log_call_activity: T::Boolean,
3020
+ module_: String,
3021
+ outcomes:
3022
+ T::Array[
3023
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::OrSymbol
3024
+ ],
3025
+ template: T.nilable(String)
912
3026
  ).returns(T.attached_class)
913
3027
  end
914
3028
  def self.new(
915
- # The ID of the voice.
916
- id:,
917
- # The provider of the voice.
918
- provider:,
919
- # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
920
- # 0.7–1.2. Default is 1.0.
921
- speed: nil
3029
+ # The Nango connection ID linking the org's Zoho CRM account to Revox.
3030
+ connection_id:,
3031
+ # Maps extracted call fields (structured_output / prompt variables) onto Zoho
3032
+ # field API names on the upserted record.
3033
+ field_mapping:,
3034
+ # When true, also log the call as a record in Zoho's Calls module (related to the
3035
+ # upserted prospect via Who_Id).
3036
+ log_call_activity:,
3037
+ # Zoho module the prospect record is upserted into (e.g. 'Leads' or 'Contacts').
3038
+ module_:,
3039
+ # Which call outcomes trigger the Zoho push (e.g. ['interested', 'none']). Use
3040
+ # 'none' to push when outcome is null.
3041
+ outcomes:,
3042
+ # Optional Note body template. Supports {{summary}}, {{outcome}}, {{phone}},
3043
+ # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{transcript}}, plus
3044
+ # prompt_variables and structured_output keys. When null/empty a default note
3045
+ # (outcome + summary + auto-listed extracted fields) is used.
3046
+ template: nil
922
3047
  )
923
3048
  end
924
3049
 
925
3050
  sig do
926
3051
  override.returns(
927
3052
  {
928
- id: String,
929
- provider:
930
- Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol,
931
- speed: Float
3053
+ connection_id: String,
3054
+ field_mapping:
3055
+ T::Array[
3056
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::FieldMapping
3057
+ ],
3058
+ log_call_activity: T::Boolean,
3059
+ module_: String,
3060
+ outcomes:
3061
+ T::Array[
3062
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
3063
+ ],
3064
+ template: T.nilable(String)
932
3065
  }
933
3066
  )
934
3067
  end
935
3068
  def to_hash
936
3069
  end
937
3070
 
938
- # The provider of the voice.
939
- module Provider
3071
+ class FieldMapping < Revox::Internal::Type::BaseModel
3072
+ OrHash =
3073
+ T.type_alias do
3074
+ T.any(
3075
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::FieldMapping,
3076
+ Revox::Internal::AnyHash
3077
+ )
3078
+ end
3079
+
3080
+ # Source key to read from the call: a structured_output field name, falling back
3081
+ # to a prompt variable of the same name.
3082
+ sig { returns(String) }
3083
+ attr_accessor :source
3084
+
3085
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
3086
+ # or a custom 'Budget\_\_c').
3087
+ sig { returns(String) }
3088
+ attr_accessor :zoho_field
3089
+
3090
+ sig do
3091
+ params(source: String, zoho_field: String).returns(
3092
+ T.attached_class
3093
+ )
3094
+ end
3095
+ def self.new(
3096
+ # Source key to read from the call: a structured_output field name, falling back
3097
+ # to a prompt variable of the same name.
3098
+ source:,
3099
+ # Destination Zoho field API name on the upserted record (e.g. 'Email', 'Company',
3100
+ # or a custom 'Budget\_\_c').
3101
+ zoho_field:
3102
+ )
3103
+ end
3104
+
3105
+ sig { override.returns({ source: String, zoho_field: String }) }
3106
+ def to_hash
3107
+ end
3108
+ end
3109
+
3110
+ module Outcome
940
3111
  extend Revox::Internal::Type::Enum
941
3112
 
942
3113
  TaggedSymbol =
943
3114
  T.type_alias do
944
3115
  T.all(
945
3116
  Symbol,
946
- Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider
3117
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome
947
3118
  )
948
3119
  end
949
3120
  OrSymbol = T.type_alias { T.any(Symbol, String) }
950
3121
 
951
- CARTESIA =
3122
+ NOT_INTERESTED =
952
3123
  T.let(
953
- :cartesia,
954
- Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol
3124
+ :not_interested,
3125
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
955
3126
  )
956
- ELEVENLABS =
3127
+ INTERESTED =
957
3128
  T.let(
958
- :elevenlabs,
959
- Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol
3129
+ :interested,
3130
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
3131
+ )
3132
+ COMPLETED =
3133
+ T.let(
3134
+ :completed,
3135
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
3136
+ )
3137
+ REQUESTED_CALLBACK_LATER =
3138
+ T.let(
3139
+ :requested_callback_later,
3140
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
3141
+ )
3142
+ REQUESTED_CALLBACK_NEW_NUMBER =
3143
+ T.let(
3144
+ :requested_callback_new_number,
3145
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
3146
+ )
3147
+ DO_NOT_CONTACT =
3148
+ T.let(
3149
+ :do_not_contact,
3150
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
3151
+ )
3152
+ AI_AVERSE =
3153
+ T.let(
3154
+ :ai_averse,
3155
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
3156
+ )
3157
+ NONE =
3158
+ T.let(
3159
+ :none,
3160
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
960
3161
  )
961
3162
 
962
3163
  sig do
963
3164
  override.returns(
964
3165
  T::Array[
965
- Revox::Models::AssistantCreateResponse::Assistant::Voice::Provider::TaggedSymbol
3166
+ Revox::Models::AssistantCreateResponse::Assistant::Zoho::Outcome::TaggedSymbol
966
3167
  ]
967
3168
  )
968
3169
  end
@@ -971,6 +3172,60 @@ module Revox
971
3172
  end
972
3173
  end
973
3174
 
3175
+ class CreatedBy < Revox::Internal::Type::BaseModel
3176
+ OrHash =
3177
+ T.type_alias do
3178
+ T.any(
3179
+ Revox::Models::AssistantCreateResponse::Assistant::CreatedBy,
3180
+ Revox::Internal::AnyHash
3181
+ )
3182
+ end
3183
+
3184
+ # The database user id of the creator.
3185
+ sig { returns(String) }
3186
+ attr_accessor :id
3187
+
3188
+ sig { returns(String) }
3189
+ attr_accessor :email
3190
+
3191
+ sig { returns(T.nilable(String)) }
3192
+ attr_accessor :first_name
3193
+
3194
+ sig { returns(T.nilable(String)) }
3195
+ attr_accessor :last_name
3196
+
3197
+ # The user who created the assistant.
3198
+ sig do
3199
+ params(
3200
+ id: String,
3201
+ email: String,
3202
+ first_name: T.nilable(String),
3203
+ last_name: T.nilable(String)
3204
+ ).returns(T.attached_class)
3205
+ end
3206
+ def self.new(
3207
+ # The database user id of the creator.
3208
+ id:,
3209
+ email:,
3210
+ first_name:,
3211
+ last_name:
3212
+ )
3213
+ end
3214
+
3215
+ sig do
3216
+ override.returns(
3217
+ {
3218
+ id: String,
3219
+ email: String,
3220
+ first_name: T.nilable(String),
3221
+ last_name: T.nilable(String)
3222
+ }
3223
+ )
3224
+ end
3225
+ def to_hash
3226
+ end
3227
+ end
3228
+
974
3229
  class FaqItem < Revox::Internal::Type::BaseModel
975
3230
  OrHash =
976
3231
  T.type_alias do