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