rcs 2.0.20.pre.rc.2 → 2.0.20.pre.rc.3
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.
- checksums.yaml +4 -4
- data/.fern/metadata.json +7 -5
- data/.fern/replay.lock +16 -0
- data/.fernignore +3 -0
- data/lib/pinnacle/client.rb +4 -9
- data/lib/pinnacle/faxes/client.rb +235 -0
- data/lib/pinnacle/faxes/types/faxes_list_request.rb +15 -0
- data/lib/pinnacle/faxes/types/send_fax_params.rb +19 -0
- data/lib/pinnacle/forms/client.rb +1 -1
- data/lib/pinnacle/pinnacle_client.rb +0 -8
- data/lib/pinnacle/types/agent_summary_carrier_launches.rb +1 -1
- data/lib/pinnacle/types/fax.rb +37 -0
- data/lib/pinnacle/types/{recording_state.rb → fax_billing_status_enum.rb} +2 -4
- data/lib/pinnacle/types/fax_detail.rb +39 -0
- data/lib/pinnacle/types/{call_direction.rb → fax_direction_enum.rb} +1 -1
- data/lib/pinnacle/types/fax_event.rb +19 -0
- data/lib/pinnacle/types/{silent_auth_check_response_status.rb → fax_event_type.rb} +3 -3
- data/lib/pinnacle/types/fax_failure_reason_enum.rb +16 -0
- data/lib/pinnacle/types/fax_quality_enum.rb +15 -0
- data/lib/pinnacle/types/fax_status_enum.rb +21 -0
- data/lib/pinnacle/types/list_faxes_response.rb +11 -0
- data/lib/pinnacle/types/webhook_event_enum.rb +2 -1
- data/lib/pinnacle/version.rb +1 -1
- data/lib/pinnacle/wrapper/messages/client.rb +1 -4
- data/lib/pinnacle.rb +13 -49
- data/reference.md +898 -1759
- metadata +17 -75
- data/lib/pinnacle/calls/client.rb +0 -359
- data/lib/pinnacle/calls/types/calls_download_recording_request.rb +0 -13
- data/lib/pinnacle/calls/types/calls_list_events_request.rb +0 -15
- data/lib/pinnacle/calls/types/calls_list_request.rb +0 -25
- data/lib/pinnacle/calls/types/create_call_params.rb +0 -17
- data/lib/pinnacle/calls/types/create_stream_token_params.rb +0 -17
- data/lib/pinnacle/calls/types/update_call_params.rb +0 -13
- data/lib/pinnacle/network/client.rb +0 -34
- data/lib/pinnacle/network/requests/client.rb +0 -94
- data/lib/pinnacle/network/requests/types/list_network_requests_params.rb +0 -21
- data/lib/pinnacle/network/silent_auth/client.rb +0 -107
- data/lib/pinnacle/network/silent_auth/types/silent_auth_check_request.rb +0 -15
- data/lib/pinnacle/network/silent_auth/types/silent_auth_request.rb +0 -17
- data/lib/pinnacle/network/sim_swap/client.rb +0 -55
- data/lib/pinnacle/network/sim_swap/types/sim_swap_request.rb +0 -15
- data/lib/pinnacle/network/subscriber_match/client.rb +0 -55
- data/lib/pinnacle/network/subscriber_match/types/subscriber_match_request.rb +0 -15
- data/lib/pinnacle/types/call.rb +0 -31
- data/lib/pinnacle/types/call_event.rb +0 -27
- data/lib/pinnacle/types/call_event_source.rb +0 -14
- data/lib/pinnacle/types/call_metadata.rb +0 -23
- data/lib/pinnacle/types/call_state.rb +0 -19
- data/lib/pinnacle/types/call_status_event.rb +0 -14
- data/lib/pinnacle/types/call_status_event_call.rb +0 -17
- data/lib/pinnacle/types/call_stream_token.rb +0 -13
- data/lib/pinnacle/types/created_call.rb +0 -33
- data/lib/pinnacle/types/e_164_phone_number.rb +0 -23
- data/lib/pinnacle/types/hosted_silent_auth_response.rb +0 -13
- data/lib/pinnacle/types/json_silent_auth_response.rb +0 -13
- data/lib/pinnacle/types/list_call_events_response.rb +0 -11
- data/lib/pinnacle/types/list_calls_response.rb +0 -11
- data/lib/pinnacle/types/list_network_requests_response.rb +0 -13
- data/lib/pinnacle/types/network_insight_status.rb +0 -14
- data/lib/pinnacle/types/network_request_id.rb +0 -23
- data/lib/pinnacle/types/network_request_result.rb +0 -16
- data/lib/pinnacle/types/network_request_status.rb +0 -15
- data/lib/pinnacle/types/network_request_summary.rb +0 -27
- data/lib/pinnacle/types/network_request_type.rb +0 -13
- data/lib/pinnacle/types/recording_download.rb +0 -11
- data/lib/pinnacle/types/silent_auth_check_response.rb +0 -11
- data/lib/pinnacle/types/silent_auth_response.rb +0 -15
- data/lib/pinnacle/types/sim_swap_response.rb +0 -15
- data/lib/pinnacle/types/subscriber_match_attributes.rb +0 -30
- data/lib/pinnacle/types/subscriber_match_response.rb +0 -13
- data/lib/pinnacle/types/subscriber_match_response_matches.rb +0 -41
- data/lib/pinnacle/types/subscriber_match_result.rb +0 -18
- data/lib/pinnacle/wrapper/voice/client.rb +0 -134
- data/lib/pinnacle/wrapper/voice/types.rb +0 -38
- data/lib/pinnacle/wrapper/voice/voice_socket.rb +0 -354
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ba7d9ba5390b5d6626c381e09321c593f9b4dcb787dfcb2d4af2bb1ed6d77b23
|
|
4
|
+
data.tar.gz: 4bec3c784d4b39d230481cef0ffd0f4f23603ef93d395ab0b68d4f3c3987968b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '0944bf2782cd1b0c365b6f1835b5bc742a1c979f969a0e464c8a7d343170800bfd81b94b6732a3dc86e0aeaa57225110493b92141c6ef2fb77cba822cdb1f956'
|
|
7
|
+
data.tar.gz: 6f2770fe602aadb266b8df1a9e8451313a091ad704f503a3184162e9d39ec196502e68659fae7d29ec2d515c20c27c21c391776ecb556145ca689cd11f87cf26
|
data/.fern/metadata.json
CHANGED
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
"useProvidedDefaults": true,
|
|
9
9
|
"rubocopVariableNumberStyle": "snake_case"
|
|
10
10
|
},
|
|
11
|
-
"originGitCommit": "
|
|
12
|
-
"originGitCommitIsDirty":
|
|
13
|
-
"invokedBy": "
|
|
14
|
-
"
|
|
15
|
-
|
|
11
|
+
"originGitCommit": "383d6b59c43597874070074325db9ee4bd58f911",
|
|
12
|
+
"originGitCommitIsDirty": false,
|
|
13
|
+
"invokedBy": "ci",
|
|
14
|
+
"requestedVersion": "2.0.20.pre.rc.3",
|
|
15
|
+
"ciProvider": "github",
|
|
16
|
+
"sdkVersion": "2.0.20.pre.rc.3"
|
|
17
|
+
}
|
data/.fern/replay.lock
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# DO NOT EDIT MANUALLY - Managed by Fern Replay
|
|
2
|
+
version: "1.0"
|
|
3
|
+
generations:
|
|
4
|
+
- commit_sha: 677e97edc210ae7352691433588e7c5c51130e3c
|
|
5
|
+
tree_hash: 811e422fb2621b0414257f02d722dd3bb8d76fdb
|
|
6
|
+
timestamp: 2026-09-18T21:49:30.155Z
|
|
7
|
+
cli_version: unknown
|
|
8
|
+
generator_versions: {}
|
|
9
|
+
- commit_sha: caa4d7194b779ef05c20600a1d3da0499b58055a
|
|
10
|
+
tree_hash: 4f7d9e328f29a5e6cb7b90c80b1a88aab9d88e01
|
|
11
|
+
timestamp: 2026-09-18T21:49:31.069Z
|
|
12
|
+
cli_version: unknown
|
|
13
|
+
generator_versions:
|
|
14
|
+
fernapi/fern-ruby-sdk: 1.12.1
|
|
15
|
+
current_generation: caa4d7194b779ef05c20600a1d3da0499b58055a
|
|
16
|
+
patches: []
|
data/.fernignore
CHANGED
data/lib/pinnacle/client.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Pinnacle
|
|
|
10
10
|
@raw_client = Pinnacle::Internal::Http::RawClient.new(
|
|
11
11
|
base_url: base_url || Pinnacle::Environment::DEFAULT,
|
|
12
12
|
headers: {
|
|
13
|
-
"User-Agent" => "rcs/2.0.20.pre.rc.
|
|
13
|
+
"User-Agent" => "rcs/2.0.20.pre.rc.3",
|
|
14
14
|
"X-Fern-Language" => "Ruby",
|
|
15
15
|
"PINNACLE-API-KEY" => api_key.to_s
|
|
16
16
|
}
|
|
@@ -57,9 +57,9 @@ module Pinnacle
|
|
|
57
57
|
@webhooks ||= Pinnacle::Webhooks::Client.new(client: @raw_client)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
# @return [Pinnacle::
|
|
61
|
-
def
|
|
62
|
-
@
|
|
60
|
+
# @return [Pinnacle::Faxes::Client]
|
|
61
|
+
def faxes
|
|
62
|
+
@faxes ||= Pinnacle::Faxes::Client.new(client: @raw_client)
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
# @return [Pinnacle::Forms::Client]
|
|
@@ -72,11 +72,6 @@ module Pinnacle
|
|
|
72
72
|
@campaigns ||= Pinnacle::Campaigns::Client.new(client: @raw_client)
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
-
# @return [Pinnacle::Network::Client]
|
|
76
|
-
def network
|
|
77
|
-
@network ||= Pinnacle::Network::Client.new(client: @raw_client)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
75
|
# @return [Pinnacle::Status::Client]
|
|
81
76
|
def status
|
|
82
77
|
@status ||= Pinnacle::Status::Client.new(client: @raw_client)
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Faxes
|
|
5
|
+
class Client
|
|
6
|
+
# @param client [Pinnacle::Internal::Http::RawClient]
|
|
7
|
+
#
|
|
8
|
+
# @return [void]
|
|
9
|
+
def initialize(client:)
|
|
10
|
+
@client = client
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# List your team's fax history, newest first.
|
|
14
|
+
#
|
|
15
|
+
# **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell and is unavailable at
|
|
16
|
+
# `https://api.pinnacle.sh`.
|
|
17
|
+
#
|
|
18
|
+
# Results contain complete faxes only. Use `nextOffset` until it is null. The maximum page size is 100 records and
|
|
19
|
+
# the maximum offset is 100,000.
|
|
20
|
+
#
|
|
21
|
+
# @param request_options [Hash]
|
|
22
|
+
# @param params [Hash]
|
|
23
|
+
# @option request_options [String] :base_url
|
|
24
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
25
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
26
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
27
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
28
|
+
# @option params [Integer, nil] :limit
|
|
29
|
+
# @option params [Integer, nil] :offset
|
|
30
|
+
# @option params [Pinnacle::Types::FaxDirectionEnum, nil] :direction
|
|
31
|
+
#
|
|
32
|
+
# @return [Pinnacle::Types::ListFaxesResponse]
|
|
33
|
+
def list(request_options: {}, **params)
|
|
34
|
+
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
35
|
+
query_params = {}
|
|
36
|
+
query_params["limit"] = params[:limit] if params.key?(:limit)
|
|
37
|
+
query_params["offset"] = params[:offset] if params.key?(:offset)
|
|
38
|
+
query_params["direction"] = params[:direction] if params.key?(:direction)
|
|
39
|
+
|
|
40
|
+
request = Pinnacle::Internal::JSON::Request.new(
|
|
41
|
+
base_url: request_options[:base_url],
|
|
42
|
+
method: "GET",
|
|
43
|
+
path: "fax",
|
|
44
|
+
query: query_params,
|
|
45
|
+
request_options: request_options
|
|
46
|
+
)
|
|
47
|
+
begin
|
|
48
|
+
response = @client.send(request)
|
|
49
|
+
rescue Net::HTTPRequestTimeout
|
|
50
|
+
raise Pinnacle::Errors::TimeoutError
|
|
51
|
+
end
|
|
52
|
+
code = response.code.to_i
|
|
53
|
+
if code.between?(200, 299)
|
|
54
|
+
Pinnacle::Types::ListFaxesResponse.load(response.body)
|
|
55
|
+
else
|
|
56
|
+
error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
|
|
57
|
+
raise error_class.new(response.body, code: code)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Send one PDF, TIFF, JPEG, PNG, DOC, DOCX, RTF, or TXT document from a configured fax number.
|
|
62
|
+
#
|
|
63
|
+
# **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell. Complete HIPAA onboarding and use the
|
|
64
|
+
# connection details provided by Pinnacle. It is not available at `https://api.pinnacle.sh`.
|
|
65
|
+
#
|
|
66
|
+
# **Availability:** `from` must be an enabled fax number owned by your team. Fax sending is unavailable for
|
|
67
|
+
# development-mode teams and sandbox numbers. Each request accepts exactly one document; cover pages and
|
|
68
|
+
# per-request webhook URLs are not supported.
|
|
69
|
+
#
|
|
70
|
+
# **Source URL:** `mediaUrl` must be a publicly reachable HTTPS URL on port 443. Signed query parameters are
|
|
71
|
+
# supported. URLs with credentials, redirects, private or local network addresses, and non-200 responses are
|
|
72
|
+
# rejected. Downloads must complete within 30 seconds.
|
|
73
|
+
#
|
|
74
|
+
# **Document limits:** the document must contain 1–3,500 pages and be no larger than 50 MB. Documents over 350
|
|
75
|
+
# pages are split automatically and remain one fax in the API. File extensions and response headers do not
|
|
76
|
+
# override file validation.
|
|
77
|
+
#
|
|
78
|
+
# **Document safety:** encrypted files, macros, ActiveX controls, embedded objects, symbolic links, unsafe archive
|
|
79
|
+
# paths, and malformed documents are rejected.
|
|
80
|
+
#
|
|
81
|
+
# **Quality:** `HIGH` is the default and recommended choice for most documents. Use `NORMAL` when speed matters
|
|
82
|
+
# more than detail, `VERY_HIGH` for small text and fine lines, `ULTRA_LIGHT` for image-heavy documents, or
|
|
83
|
+
# `ULTRA_DARK` for text-heavy documents.
|
|
84
|
+
#
|
|
85
|
+
# **Asynchronous processing:** the request returns 202 after preparation is queued. Downloading, validation,
|
|
86
|
+
# conversion, splitting, and archival happen afterward. A 202 response does not mean the document is valid or
|
|
87
|
+
# delivered. Watch `FAX.STATUS` webhooks or retrieve the fax for the final result. The initial status is
|
|
88
|
+
# `PREPARING`, `reservedCost` is zero, and `hasMedia` is false.
|
|
89
|
+
#
|
|
90
|
+
# **Multipart delivery:** the original `id` identifies the complete fax across list, detail, cancellation,
|
|
91
|
+
# billing, media, and webhooks. Parts are sent in order. If a part fails, later parts are not sent. The fax
|
|
92
|
+
# becomes `FAILED`, and `partialContent` is true if any earlier pages were transmitted.
|
|
93
|
+
#
|
|
94
|
+
# **Pricing:** sent and received faxes cost $0.025 per transmitted page. Quality does not change the rate.
|
|
95
|
+
# Pinnacle reserves the estimated cost after preparation, charges only for transmitted pages, and returns unused
|
|
96
|
+
# reserved credits. If your balance is too low, the fax becomes `FAILED` with `failureReason:
|
|
97
|
+
# INSUFFICIENT_CREDITS`.
|
|
98
|
+
#
|
|
99
|
+
# **Delivery uncertainty:** Pinnacle does not automatically retry a fax after transmission may have started, which
|
|
100
|
+
# prevents duplicate delivery and charges. If transmission cannot be confirmed, status becomes
|
|
101
|
+
# `SUBMISSION_UNKNOWN` while Pinnacle reconciles the fax.
|
|
102
|
+
#
|
|
103
|
+
# **Idempotency:** reuse the same `Idempotency-Key` and identical body after a client timeout. The key is scoped
|
|
104
|
+
# to your team and covers `from`, `to`, `mediaUrl`, and `quality`. Reusing it with an identical body returns the
|
|
105
|
+
# existing logical fax; changing any of those fields returns 409 and never sends another fax.
|
|
106
|
+
#
|
|
107
|
+
# @param request_options [Hash]
|
|
108
|
+
# @param params [Pinnacle::Faxes::Types::SendFaxParams]
|
|
109
|
+
# @option request_options [String] :base_url
|
|
110
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
111
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
112
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
113
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
114
|
+
# @option params [String] :idempotency_key
|
|
115
|
+
#
|
|
116
|
+
# @return [Pinnacle::Types::Fax]
|
|
117
|
+
def send_(request_options: {}, **params)
|
|
118
|
+
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
119
|
+
request_data = Pinnacle::Faxes::Types::SendFaxParams.new(params).to_h
|
|
120
|
+
non_body_param_names = %w[Idempotency-Key]
|
|
121
|
+
body = request_data.except(*non_body_param_names)
|
|
122
|
+
|
|
123
|
+
headers = {}
|
|
124
|
+
headers["Idempotency-Key"] = params[:idempotency_key] if params[:idempotency_key]
|
|
125
|
+
|
|
126
|
+
request = Pinnacle::Internal::JSON::Request.new(
|
|
127
|
+
base_url: request_options[:base_url],
|
|
128
|
+
method: "POST",
|
|
129
|
+
path: "fax",
|
|
130
|
+
headers: headers,
|
|
131
|
+
body: body,
|
|
132
|
+
request_options: request_options
|
|
133
|
+
)
|
|
134
|
+
begin
|
|
135
|
+
response = @client.send(request)
|
|
136
|
+
rescue Net::HTTPRequestTimeout
|
|
137
|
+
raise Pinnacle::Errors::TimeoutError
|
|
138
|
+
end
|
|
139
|
+
code = response.code.to_i
|
|
140
|
+
if code.between?(200, 299)
|
|
141
|
+
Pinnacle::Types::Fax.load(response.body)
|
|
142
|
+
else
|
|
143
|
+
error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
|
|
144
|
+
raise error_class.new(response.body, code: code)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Retrieve a fax and a one-hour signed document URL when its media is available.
|
|
149
|
+
#
|
|
150
|
+
# **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell and is unavailable at
|
|
151
|
+
# `https://api.pinnacle.sh`.
|
|
152
|
+
#
|
|
153
|
+
# Only faxes owned by your team are accessible. Unknown IDs and records removed by your team's HIPAA retention
|
|
154
|
+
# policy return 404. `mediaUrl` is null until archival completes and expires one hour after retrieval; request the
|
|
155
|
+
# fax again for a new URL.
|
|
156
|
+
#
|
|
157
|
+
# @param request_options [Hash]
|
|
158
|
+
# @param params [Hash]
|
|
159
|
+
# @option request_options [String] :base_url
|
|
160
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
161
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
162
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
163
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
164
|
+
# @option params [String] :id
|
|
165
|
+
#
|
|
166
|
+
# @return [Pinnacle::Types::FaxDetail]
|
|
167
|
+
def get(request_options: {}, **params)
|
|
168
|
+
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
169
|
+
request = Pinnacle::Internal::JSON::Request.new(
|
|
170
|
+
base_url: request_options[:base_url],
|
|
171
|
+
method: "GET",
|
|
172
|
+
path: "fax/#{URI.encode_uri_component(params[:id].to_s)}",
|
|
173
|
+
request_options: request_options
|
|
174
|
+
)
|
|
175
|
+
begin
|
|
176
|
+
response = @client.send(request)
|
|
177
|
+
rescue Net::HTTPRequestTimeout
|
|
178
|
+
raise Pinnacle::Errors::TimeoutError
|
|
179
|
+
end
|
|
180
|
+
code = response.code.to_i
|
|
181
|
+
if code.between?(200, 299)
|
|
182
|
+
Pinnacle::Types::FaxDetail.load(response.body)
|
|
183
|
+
else
|
|
184
|
+
error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
|
|
185
|
+
raise error_class.new(response.body, code: code)
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Cancel an outbound fax before transmission starts.
|
|
190
|
+
#
|
|
191
|
+
# Cancellation stops queued preparation and every unsent part, releases the credit reservation, and changes the
|
|
192
|
+
# status to `CANCELLED`. Repeating a successful cancellation returns the same fax.
|
|
193
|
+
#
|
|
194
|
+
# Cancellation is unavailable for inbound faxes, completed faxes, and `SUBMISSION_UNKNOWN` faxes. Pinnacle returns
|
|
195
|
+
# 409 once transmission may have started, even when later parts remain unsent.
|
|
196
|
+
#
|
|
197
|
+
# **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell and is unavailable at
|
|
198
|
+
# `https://api.pinnacle.sh`.
|
|
199
|
+
#
|
|
200
|
+
# Only a fax ID owned by your team is accepted. Unknown IDs return 404.
|
|
201
|
+
#
|
|
202
|
+
# @param request_options [Hash]
|
|
203
|
+
# @param params [Hash]
|
|
204
|
+
# @option request_options [String] :base_url
|
|
205
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
206
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
207
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
208
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
209
|
+
# @option params [String] :id
|
|
210
|
+
#
|
|
211
|
+
# @return [Pinnacle::Types::Fax]
|
|
212
|
+
def cancel(request_options: {}, **params)
|
|
213
|
+
params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
|
|
214
|
+
request = Pinnacle::Internal::JSON::Request.new(
|
|
215
|
+
base_url: request_options[:base_url],
|
|
216
|
+
method: "POST",
|
|
217
|
+
path: "fax/#{URI.encode_uri_component(params[:id].to_s)}/cancel",
|
|
218
|
+
request_options: request_options
|
|
219
|
+
)
|
|
220
|
+
begin
|
|
221
|
+
response = @client.send(request)
|
|
222
|
+
rescue Net::HTTPRequestTimeout
|
|
223
|
+
raise Pinnacle::Errors::TimeoutError
|
|
224
|
+
end
|
|
225
|
+
code = response.code.to_i
|
|
226
|
+
if code.between?(200, 299)
|
|
227
|
+
Pinnacle::Types::Fax.load(response.body)
|
|
228
|
+
else
|
|
229
|
+
error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
|
|
230
|
+
raise error_class.new(response.body, code: code)
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Faxes
|
|
5
|
+
module Types
|
|
6
|
+
class FaxesListRequest < Internal::Types::Model
|
|
7
|
+
field :limit, -> { Integer }, optional: true, nullable: false
|
|
8
|
+
|
|
9
|
+
field :offset, -> { Integer }, optional: true, nullable: false
|
|
10
|
+
|
|
11
|
+
field :direction, -> { Pinnacle::Types::FaxDirectionEnum }, optional: true, nullable: false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Faxes
|
|
5
|
+
module Types
|
|
6
|
+
class SendFaxParams < Internal::Types::Model
|
|
7
|
+
field :idempotency_key, -> { String }, optional: false, nullable: false, api_name: "Idempotency-Key"
|
|
8
|
+
|
|
9
|
+
field :from, -> { String }, optional: false, nullable: false
|
|
10
|
+
|
|
11
|
+
field :to, -> { String }, optional: false, nullable: false
|
|
12
|
+
|
|
13
|
+
field :media_url, -> { String }, optional: false, nullable: false, api_name: "mediaUrl"
|
|
14
|
+
|
|
15
|
+
field :quality, -> { Pinnacle::Types::FaxQualityEnum }, optional: true, nullable: false
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -174,7 +174,7 @@ module Pinnacle
|
|
|
174
174
|
# for embedding the URL in your own outreach.
|
|
175
175
|
#
|
|
176
176
|
# On completion, a `FORM.SUBMISSION` webhook event is delivered to webhooks subscribed to the sender. See
|
|
177
|
-
# [Receiving
|
|
177
|
+
# [Receiving Messages and User Events](/guides/messages/receiving).
|
|
178
178
|
#
|
|
179
179
|
# @param request_options [Hash]
|
|
180
180
|
# @param params [Pinnacle::Types::SendFormParams]
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
require_relative "wrapper/messages/client"
|
|
4
4
|
require_relative "wrapper/tools/file_uploader"
|
|
5
5
|
require_relative "wrapper/tools/client"
|
|
6
|
-
require_relative "wrapper/voice/client"
|
|
7
6
|
|
|
8
7
|
module Pinnacle
|
|
9
8
|
# Client class that extends PinnacleBaseClient with custom methods for webhook processing and file uploads.
|
|
@@ -21,12 +20,5 @@ module Pinnacle
|
|
|
21
20
|
def tools
|
|
22
21
|
@tools ||= Pinnacle::Wrapper::Tools::Client.new(client: @raw_client)
|
|
23
22
|
end
|
|
24
|
-
|
|
25
|
-
# Returns an enhanced voice client with WebSocket stream helpers.
|
|
26
|
-
#
|
|
27
|
-
# @return [Pinnacle::Wrapper::Voice::Client]
|
|
28
|
-
def voice
|
|
29
|
-
@voice ||= Pinnacle::Wrapper::Voice::Client.new(client: @raw_client)
|
|
30
|
-
end
|
|
31
23
|
end
|
|
32
24
|
end
|
|
@@ -5,7 +5,7 @@ module Pinnacle
|
|
|
5
5
|
# Raw per-carrier launch + verification state for the agent. Each
|
|
6
6
|
# value is tri-state — `null` means "no launch requested" or "not
|
|
7
7
|
# sent yet"; `false` means "pending" / "sent"; `true` means
|
|
8
|
-
# "launched" / "verified". Use the [GET /rcs/{agentId}](/api-reference/rcs-agents/get
|
|
8
|
+
# "launched" / "verified". Use the [GET /rcs/{agentId}](/api-reference/rcs-agents/get)
|
|
9
9
|
# endpoint for the resolved enum representation.
|
|
10
10
|
class AgentSummaryCarrierLaunches < Internal::Types::Model
|
|
11
11
|
field :att, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "ATT"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
class Fax < Internal::Types::Model
|
|
6
|
+
field :id, -> { String }, optional: false, nullable: false
|
|
7
|
+
|
|
8
|
+
field :direction, -> { Pinnacle::Types::FaxDirectionEnum }, optional: false, nullable: false
|
|
9
|
+
|
|
10
|
+
field :from, -> { String }, optional: false, nullable: false
|
|
11
|
+
|
|
12
|
+
field :to, -> { String }, optional: false, nullable: false
|
|
13
|
+
|
|
14
|
+
field :status, -> { Pinnacle::Types::FaxStatusEnum }, optional: false, nullable: false
|
|
15
|
+
|
|
16
|
+
field :pages, -> { Integer }, optional: false, nullable: false
|
|
17
|
+
|
|
18
|
+
field :duration_seconds, -> { Integer }, optional: false, nullable: false, api_name: "durationSeconds"
|
|
19
|
+
|
|
20
|
+
field :partial_content, -> { Internal::Types::Boolean }, optional: false, nullable: false, api_name: "partialContent"
|
|
21
|
+
|
|
22
|
+
field :failure_reason, -> { Pinnacle::Types::FaxFailureReasonEnum }, optional: false, nullable: true, api_name: "failureReason"
|
|
23
|
+
|
|
24
|
+
field :cost, -> { Integer }, optional: false, nullable: false
|
|
25
|
+
|
|
26
|
+
field :reserved_cost, -> { Integer }, optional: false, nullable: false, api_name: "reservedCost"
|
|
27
|
+
|
|
28
|
+
field :billing_status, -> { Pinnacle::Types::FaxBillingStatusEnum }, optional: false, nullable: false, api_name: "billingStatus"
|
|
29
|
+
|
|
30
|
+
field :has_media, -> { Internal::Types::Boolean }, optional: false, nullable: false, api_name: "hasMedia"
|
|
31
|
+
|
|
32
|
+
field :created_at, -> { String }, optional: false, nullable: false, api_name: "createdAt"
|
|
33
|
+
|
|
34
|
+
field :updated_at, -> { String }, optional: false, nullable: false, api_name: "updatedAt"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
module Pinnacle
|
|
4
4
|
module Types
|
|
5
|
-
module
|
|
5
|
+
module FaxBillingStatusEnum
|
|
6
6
|
extend Pinnacle::Internal::Types::Enum
|
|
7
7
|
|
|
8
8
|
PENDING = "PENDING"
|
|
9
|
-
|
|
10
|
-
FAILED = "FAILED"
|
|
11
|
-
DELETED = "DELETED"
|
|
9
|
+
SETTLED = "SETTLED"
|
|
12
10
|
end
|
|
13
11
|
end
|
|
14
12
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
class FaxDetail < Internal::Types::Model
|
|
6
|
+
field :id, -> { String }, optional: false, nullable: false
|
|
7
|
+
|
|
8
|
+
field :direction, -> { Pinnacle::Types::FaxDirectionEnum }, optional: false, nullable: false
|
|
9
|
+
|
|
10
|
+
field :from, -> { String }, optional: false, nullable: false
|
|
11
|
+
|
|
12
|
+
field :to, -> { String }, optional: false, nullable: false
|
|
13
|
+
|
|
14
|
+
field :status, -> { Pinnacle::Types::FaxStatusEnum }, optional: false, nullable: false
|
|
15
|
+
|
|
16
|
+
field :pages, -> { Integer }, optional: false, nullable: false
|
|
17
|
+
|
|
18
|
+
field :duration_seconds, -> { Integer }, optional: false, nullable: false, api_name: "durationSeconds"
|
|
19
|
+
|
|
20
|
+
field :partial_content, -> { Internal::Types::Boolean }, optional: false, nullable: false, api_name: "partialContent"
|
|
21
|
+
|
|
22
|
+
field :failure_reason, -> { Pinnacle::Types::FaxFailureReasonEnum }, optional: false, nullable: true, api_name: "failureReason"
|
|
23
|
+
|
|
24
|
+
field :cost, -> { Integer }, optional: false, nullable: false
|
|
25
|
+
|
|
26
|
+
field :reserved_cost, -> { Integer }, optional: false, nullable: false, api_name: "reservedCost"
|
|
27
|
+
|
|
28
|
+
field :billing_status, -> { Pinnacle::Types::FaxBillingStatusEnum }, optional: false, nullable: false, api_name: "billingStatus"
|
|
29
|
+
|
|
30
|
+
field :has_media, -> { Internal::Types::Boolean }, optional: false, nullable: false, api_name: "hasMedia"
|
|
31
|
+
|
|
32
|
+
field :created_at, -> { String }, optional: false, nullable: false, api_name: "createdAt"
|
|
33
|
+
|
|
34
|
+
field :updated_at, -> { String }, optional: false, nullable: false, api_name: "updatedAt"
|
|
35
|
+
|
|
36
|
+
field :media_url, -> { String }, optional: false, nullable: true, api_name: "mediaUrl"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
# Fax webhook notification. `FAX.STATUS` reports lifecycle changes, and `FAX.RECEIVED` means an inbound fax is
|
|
6
|
+
# ready.
|
|
7
|
+
#
|
|
8
|
+
# Webhooks intentionally omit `mediaUrl`. When `fax.hasMedia` is true, call the authenticated `GET /fax/{fax.id}`
|
|
9
|
+
# endpoint to receive a signed document URL that expires after one hour. Treat the URL as sensitive: do not log or
|
|
10
|
+
# store it, and request a new one after it expires.
|
|
11
|
+
class FaxEvent < Internal::Types::Model
|
|
12
|
+
field :id, -> { String }, optional: false, nullable: false
|
|
13
|
+
|
|
14
|
+
field :type, -> { Pinnacle::Types::FaxEventType }, optional: false, nullable: false
|
|
15
|
+
|
|
16
|
+
field :fax, -> { Pinnacle::Types::Fax }, optional: false, nullable: false
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
module Pinnacle
|
|
4
4
|
module Types
|
|
5
|
-
module
|
|
5
|
+
module FaxEventType
|
|
6
6
|
extend Pinnacle::Internal::Types::Enum
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
FAX_STATUS = "FAX.STATUS"
|
|
9
|
+
FAX_RECEIVED = "FAX.RECEIVED"
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
module FaxFailureReasonEnum
|
|
6
|
+
extend Pinnacle::Internal::Types::Enum
|
|
7
|
+
|
|
8
|
+
MEDIA_PREPARATION_FAILED = "MEDIA_PREPARATION_FAILED"
|
|
9
|
+
MEDIA_PREPARATION_INTERRUPTED = "MEDIA_PREPARATION_INTERRUPTED"
|
|
10
|
+
INSUFFICIENT_CREDITS = "INSUFFICIENT_CREDITS"
|
|
11
|
+
SUBMISSION_UNCONFIRMED = "SUBMISSION_UNCONFIRMED"
|
|
12
|
+
SUBMISSION_REJECTED = "SUBMISSION_REJECTED"
|
|
13
|
+
DELIVERY_FAILED = "DELIVERY_FAILED"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
module FaxQualityEnum
|
|
6
|
+
extend Pinnacle::Internal::Types::Enum
|
|
7
|
+
|
|
8
|
+
NORMAL = "NORMAL"
|
|
9
|
+
HIGH = "HIGH"
|
|
10
|
+
VERY_HIGH = "VERY_HIGH"
|
|
11
|
+
ULTRA_LIGHT = "ULTRA_LIGHT"
|
|
12
|
+
ULTRA_DARK = "ULTRA_DARK"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
module FaxStatusEnum
|
|
6
|
+
extend Pinnacle::Internal::Types::Enum
|
|
7
|
+
|
|
8
|
+
PREPARING = "PREPARING"
|
|
9
|
+
SUBMITTING = "SUBMITTING"
|
|
10
|
+
SUBMISSION_UNKNOWN = "SUBMISSION_UNKNOWN"
|
|
11
|
+
QUEUED = "QUEUED"
|
|
12
|
+
PROCESSING = "PROCESSING"
|
|
13
|
+
SENDING = "SENDING"
|
|
14
|
+
RECEIVING = "RECEIVING"
|
|
15
|
+
DELIVERED = "DELIVERED"
|
|
16
|
+
RECEIVED = "RECEIVED"
|
|
17
|
+
FAILED = "FAILED"
|
|
18
|
+
CANCELLED = "CANCELLED"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Types
|
|
5
|
+
class ListFaxesResponse < Internal::Types::Model
|
|
6
|
+
field :data, -> { Internal::Types::Array[Pinnacle::Types::Fax] }, optional: false, nullable: false
|
|
7
|
+
|
|
8
|
+
field :next_offset, -> { Integer }, optional: false, nullable: true, api_name: "nextOffset"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
data/lib/pinnacle/version.rb
CHANGED
|
@@ -5,7 +5,6 @@ require_relative "../../types/message_event"
|
|
|
5
5
|
require_relative "../../types/user_event"
|
|
6
6
|
require_relative "../../types/form_submission_event"
|
|
7
7
|
require_relative "../../types/campaign_status_event"
|
|
8
|
-
require_relative "../../types/call_status_event"
|
|
9
8
|
|
|
10
9
|
module Pinnacle
|
|
11
10
|
module Wrapper
|
|
@@ -24,7 +23,7 @@ module Pinnacle
|
|
|
24
23
|
# @param request [Hash] Request with :headers and :body keys
|
|
25
24
|
# @param secret [String, nil] Webhook secret (falls back to PINNACLE_SIGNING_SECRET env var)
|
|
26
25
|
#
|
|
27
|
-
# @return [Pinnacle::Types::MessageEvent, Pinnacle::Types::UserEvent, Pinnacle::Types::FormSubmissionEvent, Pinnacle::Types::CampaignStatusEvent
|
|
26
|
+
# @return [Pinnacle::Types::MessageEvent, Pinnacle::Types::UserEvent, Pinnacle::Types::FormSubmissionEvent, Pinnacle::Types::CampaignStatusEvent]
|
|
28
27
|
# @raise [Pinnacle::Errors::UnauthorizedError] If webhook signature is invalid or missing
|
|
29
28
|
# @raise [Pinnacle::Errors::ClientError] If request body cannot be parsed
|
|
30
29
|
def process(request, secret: nil)
|
|
@@ -67,8 +66,6 @@ module Pinnacle
|
|
|
67
66
|
Pinnacle::Types::FormSubmissionEvent.coerce(parsed)
|
|
68
67
|
when "CAMPAIGN.STATUS"
|
|
69
68
|
Pinnacle::Types::CampaignStatusEvent.coerce(parsed)
|
|
70
|
-
when "CALL.STATUS"
|
|
71
|
-
Pinnacle::Types::CallStatusEvent.coerce(parsed)
|
|
72
69
|
else
|
|
73
70
|
Pinnacle::Types::MessageEvent.coerce(parsed)
|
|
74
71
|
end
|