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