revox 0.2.0 → 0.4.0

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