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