revox 0.0.2 → 0.2.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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +96 -0
  3. data/README.md +88 -22
  4. data/lib/revox/client.rb +19 -1
  5. data/lib/revox/internal/transport/base_client.rb +5 -0
  6. data/lib/revox/internal/type/base_model.rb +3 -3
  7. data/lib/revox/internal/util.rb +53 -7
  8. data/lib/revox/models/assistant_create_params.rb +1036 -11
  9. data/lib/revox/models/assistant_create_response.rb +1071 -11
  10. data/lib/revox/models/assistant_delete_params.rb +7 -1
  11. data/lib/revox/models/assistant_list_response.rb +1070 -11
  12. data/lib/revox/models/assistant_retrieve_params.rb +7 -1
  13. data/lib/revox/models/assistant_retrieve_response.rb +1066 -11
  14. data/lib/revox/models/assistant_update_params.rb +1043 -11
  15. data/lib/revox/models/assistant_update_response.rb +1097 -12
  16. data/lib/revox/models/call_create_params.rb +1063 -11
  17. data/lib/revox/models/call_create_response.rb +2507 -87
  18. data/lib/revox/models/call_retrieve_params.rb +7 -1
  19. data/lib/revox/models/call_retrieve_response.rb +2512 -87
  20. data/lib/revox/models/campaign_cancel_params.rb +20 -0
  21. data/lib/revox/models/campaign_cancel_response.rb +16 -0
  22. data/lib/revox/models/campaign_create_params.rb +239 -0
  23. data/lib/revox/models/campaign_create_response.rb +2030 -0
  24. data/lib/revox/models/campaign_delete_params.rb +20 -0
  25. data/lib/revox/models/campaign_delete_response.rb +16 -0
  26. data/lib/revox/models/campaign_export_rows_params.rb +20 -0
  27. data/lib/revox/models/campaign_export_rows_response.rb +22 -0
  28. data/lib/revox/models/campaign_get_rows_params.rb +20 -0
  29. data/lib/revox/models/campaign_get_rows_response.rb +3176 -0
  30. data/lib/revox/models/campaign_list_params.rb +14 -0
  31. data/lib/revox/models/campaign_list_response.rb +2024 -0
  32. data/lib/revox/models/campaign_retrieve_params.rb +20 -0
  33. data/lib/revox/models/campaign_retrieve_response.rb +2032 -0
  34. data/lib/revox/models/users/me_retrieve_response.rb +13 -1
  35. data/lib/revox/models/users/me_update_response.rb +13 -1
  36. data/lib/revox/models/voice_list_response.rb +55 -1
  37. data/lib/revox/models/voice_preview_params.rb +43 -3
  38. data/lib/revox/models/voice_retrieve_params.rb +7 -1
  39. data/lib/revox/models.rb +14 -2
  40. data/lib/revox/resources/assistants.rb +138 -6
  41. data/lib/revox/resources/call.rb +10 -27
  42. data/lib/revox/resources/campaigns.rb +176 -0
  43. data/lib/revox/resources/voices.rb +17 -7
  44. data/lib/revox/version.rb +1 -1
  45. data/lib/revox.rb +15 -2
  46. data/rbi/revox/client.rbi +3 -0
  47. data/rbi/revox/internal/util.rbi +28 -0
  48. data/rbi/revox/models/assistant_create_params.rbi +2135 -102
  49. data/rbi/revox/models/assistant_create_response.rbi +2454 -199
  50. data/rbi/revox/models/assistant_delete_params.rbi +11 -5
  51. data/rbi/revox/models/assistant_list_response.rbi +2448 -195
  52. data/rbi/revox/models/assistant_retrieve_params.rbi +11 -5
  53. data/rbi/revox/models/assistant_retrieve_response.rbi +2401 -210
  54. data/rbi/revox/models/assistant_update_params.rbi +2139 -100
  55. data/rbi/revox/models/assistant_update_response.rbi +2504 -198
  56. data/rbi/revox/models/call_create_params.rbi +2377 -222
  57. data/rbi/revox/models/call_create_response.rbi +5840 -594
  58. data/rbi/revox/models/call_retrieve_params.rbi +11 -5
  59. data/rbi/revox/models/call_retrieve_response.rbi +5872 -618
  60. data/rbi/revox/models/campaign_cancel_params.rbi +33 -0
  61. data/rbi/revox/models/campaign_cancel_response.rbi +23 -0
  62. data/rbi/revox/models/campaign_create_params.rbi +433 -0
  63. data/rbi/revox/models/campaign_create_response.rbi +4170 -0
  64. data/rbi/revox/models/campaign_delete_params.rbi +33 -0
  65. data/rbi/revox/models/campaign_delete_response.rbi +23 -0
  66. data/rbi/revox/models/campaign_export_rows_params.rbi +33 -0
  67. data/rbi/revox/models/campaign_export_rows_response.rbi +29 -0
  68. data/rbi/revox/models/campaign_get_rows_params.rbi +33 -0
  69. data/rbi/revox/models/campaign_get_rows_response.rbi +6706 -0
  70. data/rbi/revox/models/campaign_list_params.rbi +27 -0
  71. data/rbi/revox/models/campaign_list_response.rbi +4156 -0
  72. data/rbi/revox/models/campaign_retrieve_params.rbi +33 -0
  73. data/rbi/revox/models/campaign_retrieve_response.rbi +4175 -0
  74. data/rbi/revox/models/users/me_retrieve_response.rbi +13 -3
  75. data/rbi/revox/models/users/me_update_response.rbi +13 -3
  76. data/rbi/revox/models/voice_list_response.rbi +105 -3
  77. data/rbi/revox/models/voice_preview_params.rbi +60 -2
  78. data/rbi/revox/models/voice_retrieve_params.rbi +6 -1
  79. data/rbi/revox/models.rbi +14 -2
  80. data/rbi/revox/resources/assistants.rbi +301 -6
  81. data/rbi/revox/resources/call.rbi +10 -19
  82. data/rbi/revox/resources/campaigns.rbi +121 -0
  83. data/rbi/revox/resources/voices.rbi +15 -5
  84. data/sig/revox/client.rbs +2 -0
  85. data/sig/revox/internal/util.rbs +14 -0
  86. data/sig/revox/models/assistant_create_params.rbs +841 -4
  87. data/sig/revox/models/assistant_create_response.rbs +860 -3
  88. data/sig/revox/models/assistant_delete_params.rbs +8 -3
  89. data/sig/revox/models/assistant_list_response.rbs +860 -3
  90. data/sig/revox/models/assistant_retrieve_params.rbs +8 -3
  91. data/sig/revox/models/assistant_retrieve_response.rbs +859 -3
  92. data/sig/revox/models/assistant_update_params.rbs +846 -4
  93. data/sig/revox/models/assistant_update_response.rbs +886 -6
  94. data/sig/revox/models/call_create_params.rbs +844 -6
  95. data/sig/revox/models/call_create_response.rbs +2166 -79
  96. data/sig/revox/models/call_retrieve_params.rbs +9 -3
  97. data/sig/revox/models/call_retrieve_response.rbs +2166 -79
  98. data/sig/revox/models/campaign_cancel_params.rbs +20 -0
  99. data/sig/revox/models/campaign_cancel_response.rbs +13 -0
  100. data/sig/revox/models/campaign_create_params.rbs +203 -0
  101. data/sig/revox/models/campaign_create_response.rbs +1694 -0
  102. data/sig/revox/models/campaign_delete_params.rbs +20 -0
  103. data/sig/revox/models/campaign_delete_response.rbs +13 -0
  104. data/sig/revox/models/campaign_export_rows_params.rbs +20 -0
  105. data/sig/revox/models/campaign_export_rows_response.rbs +15 -0
  106. data/sig/revox/models/campaign_get_rows_params.rbs +20 -0
  107. data/sig/revox/models/campaign_get_rows_response.rbs +2688 -0
  108. data/sig/revox/models/campaign_list_params.rbs +14 -0
  109. data/sig/revox/models/campaign_list_response.rbs +1694 -0
  110. data/sig/revox/models/campaign_retrieve_params.rbs +20 -0
  111. data/sig/revox/models/campaign_retrieve_response.rbs +1694 -0
  112. data/sig/revox/models/users/me_retrieve_response.rbs +8 -3
  113. data/sig/revox/models/users/me_update_response.rbs +8 -3
  114. data/sig/revox/models/voice_list_response.rbs +45 -3
  115. data/sig/revox/models/voice_preview_params.rbs +35 -1
  116. data/sig/revox/models/voice_retrieve_params.rbs +5 -1
  117. data/sig/revox/models.rbs +14 -2
  118. data/sig/revox/resources/assistants.rbs +54 -0
  119. data/sig/revox/resources/call.rbs +0 -6
  120. data/sig/revox/resources/campaigns.rbs +49 -0
  121. data/sig/revox/resources/voices.rbs +3 -0
  122. metadata +47 -8
  123. data/lib/revox/models/call_list_params.rb +0 -29
  124. data/lib/revox/models/call_list_response.rb +0 -197
  125. data/rbi/revox/models/call_list_params.rbi +0 -47
  126. data/rbi/revox/models/call_list_response.rbi +0 -401
  127. data/sig/revox/models/call_list_params.rbs +0 -28
  128. data/sig/revox/models/call_list_response.rbs +0 -171
@@ -0,0 +1,176 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Revox
4
+ module Resources
5
+ class Campaigns
6
+ # Some parameter documentations has been truncated, see
7
+ # {Revox::Models::CampaignCreateParams} for more details.
8
+ #
9
+ # Create a new outbound calling campaign. By default the campaign launches
10
+ # immediately. Set launch to false to save as a draft for later review.
11
+ #
12
+ # @overload create(assistant_id:, contacts:, launch:, name:, type:, call_retry_config: nil, from_phone_number: nil, max_concurrent_calls: nil, scheduled_at: nil, request_options: {})
13
+ #
14
+ # @param assistant_id [String] The ID of the assistant to use
15
+ #
16
+ # @param contacts [Array<Revox::Models::CampaignCreateParams::Contact>] The list of contacts to call
17
+ #
18
+ # @param launch [Boolean] Whether to launch the campaign immediately. Set to false to save as a draft.
19
+ #
20
+ # @param name [String] The name of the campaign
21
+ #
22
+ # @param type [Symbol, Revox::Models::CampaignCreateParams::Type] Campaign type. 'jump_in' campaigns only dial while someone is on the campaign pa
23
+ #
24
+ # @param call_retry_config [Revox::Models::CampaignCreateParams::CallRetryConfig] Override retry configuration for calls in this campaign. If not provided, uses t
25
+ #
26
+ # @param from_phone_number [String] The phone number to use for outbound calls (E.164 format, e.g., +1234567890)
27
+ #
28
+ # @param max_concurrent_calls [Float] Maximum number of concurrent calls allowed for this campaign
29
+ #
30
+ # @param scheduled_at [Time, Object] Schedule all calls in this campaign to start at a specific date and time (ISO 86
31
+ #
32
+ # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}, nil]
33
+ #
34
+ # @return [Revox::Models::CampaignCreateResponse]
35
+ #
36
+ # @see Revox::Models::CampaignCreateParams
37
+ def create(params)
38
+ parsed, options = Revox::CampaignCreateParams.dump_request(params)
39
+ @client.request(
40
+ method: :post,
41
+ path: "campaigns",
42
+ body: parsed,
43
+ model: Revox::Models::CampaignCreateResponse,
44
+ options: options
45
+ )
46
+ end
47
+
48
+ # Retrieve the full details of a single campaign by its unique ID. Can be used to
49
+ # poll for campaign completion.
50
+ #
51
+ # @overload retrieve(id, request_options: {})
52
+ #
53
+ # @param id [String]
54
+ # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}, nil]
55
+ #
56
+ # @return [Revox::Models::CampaignRetrieveResponse]
57
+ #
58
+ # @see Revox::Models::CampaignRetrieveParams
59
+ def retrieve(id, params = {})
60
+ @client.request(
61
+ method: :get,
62
+ path: ["campaigns/%1$s", id],
63
+ model: Revox::Models::CampaignRetrieveResponse,
64
+ options: params[:request_options]
65
+ )
66
+ end
67
+
68
+ # Retrieve all campaigns for your organization, including both active and
69
+ # completed ones.
70
+ #
71
+ # @overload list(request_options: {})
72
+ #
73
+ # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}, nil]
74
+ #
75
+ # @return [Revox::Models::CampaignListResponse]
76
+ #
77
+ # @see Revox::Models::CampaignListParams
78
+ def list(params = {})
79
+ @client.request(
80
+ method: :get,
81
+ path: "campaigns",
82
+ model: Revox::Models::CampaignListResponse,
83
+ options: params[:request_options]
84
+ )
85
+ end
86
+
87
+ # Permanently delete a campaign and all its associated rows. This action is
88
+ # irreversible. In-progress calls will not be affected, but no new calls will be
89
+ # placed.
90
+ #
91
+ # @overload delete(id, request_options: {})
92
+ #
93
+ # @param id [String]
94
+ # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}, nil]
95
+ #
96
+ # @return [Revox::Models::CampaignDeleteResponse]
97
+ #
98
+ # @see Revox::Models::CampaignDeleteParams
99
+ def delete(id, params = {})
100
+ @client.request(
101
+ method: :delete,
102
+ path: ["campaigns/%1$s", id],
103
+ model: Revox::Models::CampaignDeleteResponse,
104
+ options: params[:request_options]
105
+ )
106
+ end
107
+
108
+ # Cancel a running or scheduled campaign. Pending and queued calls will be
109
+ # aborted, while in-progress calls will be allowed to finish. Unlike deletion, the
110
+ # campaign and its rows are preserved for historical reference.
111
+ #
112
+ # @overload cancel(id, request_options: {})
113
+ #
114
+ # @param id [String]
115
+ # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}, nil]
116
+ #
117
+ # @return [Revox::Models::CampaignCancelResponse]
118
+ #
119
+ # @see Revox::Models::CampaignCancelParams
120
+ def cancel(id, params = {})
121
+ @client.request(
122
+ method: :post,
123
+ path: ["campaigns/%1$s/cancel", id],
124
+ model: Revox::Models::CampaignCancelResponse,
125
+ options: params[:request_options]
126
+ )
127
+ end
128
+
129
+ # Export all rows of a campaign as a CSV file for offline analysis or reporting.
130
+ #
131
+ # @overload export_rows(id, request_options: {})
132
+ #
133
+ # @param id [String]
134
+ # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}, nil]
135
+ #
136
+ # @return [Revox::Models::CampaignExportRowsResponse]
137
+ #
138
+ # @see Revox::Models::CampaignExportRowsParams
139
+ def export_rows(id, params = {})
140
+ @client.request(
141
+ method: :get,
142
+ path: ["campaigns/%1$s/export", id],
143
+ model: Revox::Models::CampaignExportRowsResponse,
144
+ options: params[:request_options]
145
+ )
146
+ end
147
+
148
+ # Retrieve all contact rows for a campaign. Useful for loading draft campaign data
149
+ # for editing.
150
+ #
151
+ # @overload get_rows(id, request_options: {})
152
+ #
153
+ # @param id [String]
154
+ # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}, nil]
155
+ #
156
+ # @return [Revox::Models::CampaignGetRowsResponse]
157
+ #
158
+ # @see Revox::Models::CampaignGetRowsParams
159
+ def get_rows(id, params = {})
160
+ @client.request(
161
+ method: :get,
162
+ path: ["campaigns/%1$s/rows", id],
163
+ model: Revox::Models::CampaignGetRowsResponse,
164
+ options: params[:request_options]
165
+ )
166
+ end
167
+
168
+ # @api private
169
+ #
170
+ # @param client [Revox::Client]
171
+ def initialize(client:)
172
+ @client = client
173
+ end
174
+ end
175
+ end
176
+ end
@@ -3,7 +3,7 @@
3
3
  module Revox
4
4
  module Resources
5
5
  class Voices
6
- # Get a single voice by ID.
6
+ # Retrieve details for a single voice by its unique ID and provider.
7
7
  #
8
8
  # @overload retrieve(id, provider:, request_options: {})
9
9
  #
@@ -18,17 +18,18 @@ module Revox
18
18
  # @see Revox::Models::VoiceRetrieveParams
19
19
  def retrieve(id, params)
20
20
  parsed, options = Revox::VoiceRetrieveParams.dump_request(params)
21
+ query = Revox::Internal::Util.encode_query_params(parsed)
21
22
  @client.request(
22
23
  method: :get,
23
24
  path: ["voices/%1$s", id],
24
- query: parsed,
25
+ query: query,
25
26
  model: Revox::Models::VoiceRetrieveResponse,
26
27
  options: options
27
28
  )
28
29
  end
29
30
 
30
- # Get the list of voices available for the call. Supports Cartesia, ElevenLabs,
31
- # Inworld voices.
31
+ # Retrieve all voices available for AI calls, including preset voices from
32
+ # Cartesia/ElevenLabs and your organization's cloned voices.
32
33
  #
33
34
  # @overload list(request_options: {})
34
35
  #
@@ -46,15 +47,24 @@ module Revox
46
47
  )
47
48
  end
48
49
 
49
- # Generate a voice preview audio sample for a given voice ID.
50
+ # Some parameter documentations has been truncated, see
51
+ # {Revox::Models::VoicePreviewParams} for more details.
50
52
  #
51
- # @overload preview(provider:, voice_id:, text: nil, request_options: {})
53
+ # Generate a short audio preview for a given voice.
54
+ #
55
+ # @overload preview(provider:, voice_id:, model: nil, speed: nil, text: nil, volume: nil, request_options: {})
52
56
  #
53
57
  # @param provider [Symbol, Revox::Models::VoicePreviewParams::Provider] The provider to use for the preview.
54
58
  #
55
59
  # @param voice_id [String] The voice ID to generate a preview for.
56
60
  #
57
- # @param text [String] The text to generate a preview for.
61
+ # @param model [Symbol, Revox::Models::VoicePreviewParams::Model] Cartesia model for the preview. Defaults to sonic-3. Ignored for other providers
62
+ #
63
+ # @param speed [Float] Speed for preview. Cartesia 0.6–1.5, ElevenLabs 0.7–1.2. Default 1.0.
64
+ #
65
+ # @param text [String] Custom text for the preview. If omitted, a short default is used.
66
+ #
67
+ # @param volume [Float] Volume for Cartesia preview (0.5–2.0). Ignored for other providers.
58
68
  #
59
69
  # @param request_options [Revox::RequestOptions, Hash{Symbol=>Object}, nil]
60
70
  #
data/lib/revox/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Revox
4
- VERSION = "0.0.2"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/revox.rb CHANGED
@@ -64,10 +64,22 @@ require_relative "revox/models/assistant_update_params"
64
64
  require_relative "revox/models/assistant_update_response"
65
65
  require_relative "revox/models/call_create_params"
66
66
  require_relative "revox/models/call_create_response"
67
- require_relative "revox/models/call_list_params"
68
- require_relative "revox/models/call_list_response"
69
67
  require_relative "revox/models/call_retrieve_params"
70
68
  require_relative "revox/models/call_retrieve_response"
69
+ require_relative "revox/models/campaign_cancel_params"
70
+ require_relative "revox/models/campaign_cancel_response"
71
+ require_relative "revox/models/campaign_create_params"
72
+ require_relative "revox/models/campaign_create_response"
73
+ require_relative "revox/models/campaign_delete_params"
74
+ require_relative "revox/models/campaign_delete_response"
75
+ require_relative "revox/models/campaign_export_rows_params"
76
+ require_relative "revox/models/campaign_export_rows_response"
77
+ require_relative "revox/models/campaign_get_rows_params"
78
+ require_relative "revox/models/campaign_get_rows_response"
79
+ require_relative "revox/models/campaign_list_params"
80
+ require_relative "revox/models/campaign_list_response"
81
+ require_relative "revox/models/campaign_retrieve_params"
82
+ require_relative "revox/models/campaign_retrieve_response"
71
83
  require_relative "revox/models/users/me_retrieve_params"
72
84
  require_relative "revox/models/users/me_retrieve_response"
73
85
  require_relative "revox/models/users/me_update_params"
@@ -80,6 +92,7 @@ require_relative "revox/models/voice_retrieve_response"
80
92
  require_relative "revox/models"
81
93
  require_relative "revox/resources/assistants"
82
94
  require_relative "revox/resources/call"
95
+ require_relative "revox/resources/campaigns"
83
96
  require_relative "revox/resources/users"
84
97
  require_relative "revox/resources/users/me"
85
98
  require_relative "revox/resources/voices"
data/rbi/revox/client.rbi CHANGED
@@ -13,6 +13,9 @@ module Revox
13
13
  sig { returns(String) }
14
14
  attr_reader :api_key
15
15
 
16
+ sig { returns(Revox::Resources::Campaigns) }
17
+ attr_reader :campaigns
18
+
16
19
  sig { returns(Revox::Resources::Assistants) }
17
20
  attr_reader :assistants
18
21
 
@@ -144,12 +144,20 @@ module Revox
144
144
  end
145
145
  end
146
146
 
147
+ # https://www.rfc-editor.org/rfc/rfc3986.html#section-3.3
148
+ RFC_3986_NOT_PCHARS = T.let(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/, Regexp)
149
+
147
150
  class << self
148
151
  # @api private
149
152
  sig { params(uri: URI::Generic).returns(String) }
150
153
  def uri_origin(uri)
151
154
  end
152
155
 
156
+ # @api private
157
+ sig { params(path: T.any(String, Integer)).returns(String) }
158
+ def encode_path(path)
159
+ end
160
+
153
161
  # @api private
154
162
  sig { params(path: T.any(String, T::Array[String])).returns(String) }
155
163
  def interpolate_path(path)
@@ -295,6 +303,26 @@ module Revox
295
303
  T.let(%r{^application/(:?x-(?:n|l)djson)|(:?(?:x-)?jsonl)}, Regexp)
296
304
 
297
305
  class << self
306
+ # @api private
307
+ sig do
308
+ params(query: Revox::Internal::AnyHash).returns(
309
+ Revox::Internal::AnyHash
310
+ )
311
+ end
312
+ def encode_query_params(query)
313
+ end
314
+
315
+ # @api private
316
+ sig do
317
+ params(
318
+ collection: Revox::Internal::AnyHash,
319
+ key: String,
320
+ element: T.anything
321
+ ).void
322
+ end
323
+ private def write_query_param_element!(collection, key, element)
324
+ end
325
+
298
326
  # @api private
299
327
  sig do
300
328
  params(