revox 0.1.0 → 0.3.0

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