late-sdk 0.0.726 → 0.0.728
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/README.md +19 -0
- data/docs/AttachNumberToSipTrunk200Response.md +22 -0
- data/docs/AttachNumberToSipTrunkRequest.md +18 -0
- data/docs/CreatePostRequest.md +1 -1
- data/docs/CreateSipTrunk201Response.md +34 -0
- data/docs/CreateSipTrunk201ResponseTermination.md +20 -0
- data/docs/CreateSipTrunkRequest.md +24 -0
- data/docs/DetachNumberFromSipTrunk200Response.md +20 -0
- data/docs/GetPhoneNumber200ResponsePhoneNumber.md +3 -1
- data/docs/GetSipTrunk200Response.md +34 -0
- data/docs/GetSipTrunk200ResponseNumbersInner.md +20 -0
- data/docs/LinkedInPlatformData.md +1 -1
- data/docs/ListPhoneNumbers200ResponseNumbersInner.md +2 -0
- data/docs/ListSipTrunks200Response.md +20 -0
- data/docs/ListSipTrunks200ResponseTrunksInner.md +32 -0
- data/docs/ListSipTrunks200ResponseTrunksInnerTermination.md +20 -0
- data/docs/PostsApi.md +1 -1
- data/docs/RotateSipTrunkCredentials200Response.md +20 -0
- data/docs/VoiceApi.md +485 -0
- data/lib/zernio-sdk/api/posts_api.rb +2 -2
- data/lib/zernio-sdk/api/voice_api.rb +447 -0
- data/lib/zernio-sdk/models/attach_number_to_sip_trunk200_response.rb +165 -0
- data/lib/zernio-sdk/models/attach_number_to_sip_trunk_request.rb +165 -0
- data/lib/zernio-sdk/models/create_post_request.rb +1 -1
- data/lib/zernio-sdk/models/create_sip_trunk201_response.rb +255 -0
- data/lib/zernio-sdk/models/create_sip_trunk201_response_termination.rb +158 -0
- data/lib/zernio-sdk/models/create_sip_trunk_request.rb +283 -0
- data/lib/zernio-sdk/models/detach_number_from_sip_trunk200_response.rb +157 -0
- data/lib/zernio-sdk/models/get_phone_number200_response_phone_number.rb +15 -4
- data/lib/zernio-sdk/models/get_sip_trunk200_response.rb +256 -0
- data/lib/zernio-sdk/models/get_sip_trunk200_response_numbers_inner.rb +157 -0
- data/lib/zernio-sdk/models/linked_in_platform_data.rb +1 -1
- data/lib/zernio-sdk/models/list_phone_numbers200_response_numbers_inner.rb +12 -1
- data/lib/zernio-sdk/models/list_sip_trunks200_response.rb +159 -0
- data/lib/zernio-sdk/models/list_sip_trunks200_response_trunks_inner.rb +245 -0
- data/lib/zernio-sdk/models/list_sip_trunks200_response_trunks_inner_termination.rb +156 -0
- data/lib/zernio-sdk/models/rotate_sip_trunk_credentials200_response.rb +156 -0
- data/lib/zernio-sdk/version.rb +1 -1
- data/lib/zernio-sdk.rb +12 -0
- data/openapi.yaml +271 -3
- data/spec/api/posts_api_spec.rb +1 -1
- data/spec/api/voice_api_spec.rb +82 -0
- data/spec/models/attach_number_to_sip_trunk200_response_spec.rb +48 -0
- data/spec/models/attach_number_to_sip_trunk_request_spec.rb +36 -0
- data/spec/models/create_sip_trunk201_response_spec.rb +88 -0
- data/spec/models/create_sip_trunk201_response_termination_spec.rb +42 -0
- data/spec/models/create_sip_trunk_request_spec.rb +58 -0
- data/spec/models/detach_number_from_sip_trunk200_response_spec.rb +42 -0
- data/spec/models/get_phone_number200_response_phone_number_spec.rb +6 -0
- data/spec/models/get_sip_trunk200_response_numbers_inner_spec.rb +42 -0
- data/spec/models/get_sip_trunk200_response_spec.rb +88 -0
- data/spec/models/list_phone_numbers200_response_numbers_inner_spec.rb +6 -0
- data/spec/models/list_sip_trunks200_response_spec.rb +42 -0
- data/spec/models/list_sip_trunks200_response_trunks_inner_spec.rb +82 -0
- data/spec/models/list_sip_trunks200_response_trunks_inner_termination_spec.rb +42 -0
- data/spec/models/rotate_sip_trunk_credentials200_response_spec.rb +42 -0
- data/zernio-sdk-0.0.728.gem +0 -0
- metadata +51 -3
- data/zernio-sdk-0.0.726.gem +0 -0
data/docs/VoiceApi.md
CHANGED
|
@@ -4,19 +4,166 @@ All URIs are relative to *https://zernio.com/api*
|
|
|
4
4
|
|
|
5
5
|
| Method | HTTP request | Description |
|
|
6
6
|
| ------ | ------------ | ----------- |
|
|
7
|
+
| [**attach_number_to_sip_trunk**](VoiceApi.md#attach_number_to_sip_trunk) | **POST** /v1/phone-numbers/{id}/sip-trunk | Attach a number to a SIP trunk |
|
|
8
|
+
| [**create_sip_trunk**](VoiceApi.md#create_sip_trunk) | **POST** /v1/phone-numbers/sip-trunks | Create a SIP trunk |
|
|
7
9
|
| [**create_voice_call**](VoiceApi.md#create_voice_call) | **POST** /v1/voice/calls | Place an outbound phone call |
|
|
8
10
|
| [**create_voice_web_session**](VoiceApi.md#create_voice_web_session) | **POST** /v1/voice/calls/web | Mint a browser softphone session |
|
|
11
|
+
| [**delete_sip_trunk**](VoiceApi.md#delete_sip_trunk) | **DELETE** /v1/phone-numbers/sip-trunks/{id} | Delete a SIP trunk |
|
|
12
|
+
| [**detach_number_from_sip_trunk**](VoiceApi.md#detach_number_from_sip_trunk) | **DELETE** /v1/phone-numbers/{id}/sip-trunk | Detach a number from its SIP trunk |
|
|
9
13
|
| [**dial_voice_web_call**](VoiceApi.md#dial_voice_web_call) | **POST** /v1/voice/calls/web/dial | Dial from the browser softphone |
|
|
10
14
|
| [**disable_voice_on_number**](VoiceApi.md#disable_voice_on_number) | **DELETE** /v1/phone-numbers/{id}/voice | Disable phone calling on a number |
|
|
11
15
|
| [**enable_voice_on_number**](VoiceApi.md#enable_voice_on_number) | **POST** /v1/phone-numbers/{id}/voice | Enable phone calling on a number |
|
|
12
16
|
| [**end_voice_call**](VoiceApi.md#end_voice_call) | **POST** /v1/voice/calls/{id}/end | Hang up a live call |
|
|
17
|
+
| [**get_sip_trunk**](VoiceApi.md#get_sip_trunk) | **GET** /v1/phone-numbers/sip-trunks/{id} | Get a SIP trunk |
|
|
13
18
|
| [**get_voice_call**](VoiceApi.md#get_voice_call) | **GET** /v1/voice/calls/{id} | Get a phone call |
|
|
14
19
|
| [**get_voice_call_estimate**](VoiceApi.md#get_voice_call_estimate) | **GET** /v1/voice/calls/estimate | Estimate call cost |
|
|
15
20
|
| [**get_voice_call_recording**](VoiceApi.md#get_voice_call_recording) | **GET** /v1/voice/calls/{id}/recording | Get a call recording |
|
|
21
|
+
| [**list_sip_trunks**](VoiceApi.md#list_sip_trunks) | **GET** /v1/phone-numbers/sip-trunks | List SIP trunks |
|
|
16
22
|
| [**list_voice_calls**](VoiceApi.md#list_voice_calls) | **GET** /v1/voice/calls | List phone calls |
|
|
23
|
+
| [**rotate_sip_trunk_credentials**](VoiceApi.md#rotate_sip_trunk_credentials) | **POST** /v1/phone-numbers/sip-trunks/{id}/rotate-credentials | Rotate a SIP trunk's password |
|
|
17
24
|
| [**transfer_voice_call**](VoiceApi.md#transfer_voice_call) | **POST** /v1/voice/calls/{id}/transfer | Blind-transfer a live call |
|
|
18
25
|
|
|
19
26
|
|
|
27
|
+
## attach_number_to_sip_trunk
|
|
28
|
+
|
|
29
|
+
> <AttachNumberToSipTrunk200Response> attach_number_to_sip_trunk(id, attach_number_to_sip_trunk_request)
|
|
30
|
+
|
|
31
|
+
Attach a number to a SIP trunk
|
|
32
|
+
|
|
33
|
+
Routes the number's calls to the trunk: the external platform receives its inbound directly and can present it as outbound caller ID. While attached, Zernio-side voice features are off for this number (call forwarding, IVR, voicemail, recording, the softphone, and WhatsApp calling), so the number must have Calls and WhatsApp calling disabled before attaching. SMS and WhatsApp messaging are unaffected.
|
|
34
|
+
|
|
35
|
+
### Examples
|
|
36
|
+
|
|
37
|
+
```ruby
|
|
38
|
+
require 'time'
|
|
39
|
+
require 'zernio-sdk'
|
|
40
|
+
# setup authorization
|
|
41
|
+
Zernio.configure do |config|
|
|
42
|
+
# Configure Bearer authorization (JWT): bearerAuth
|
|
43
|
+
config.access_token = 'YOUR_BEARER_TOKEN'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
api_instance = Zernio::VoiceApi.new
|
|
47
|
+
id = 'id_example' # String | Phone number record ID (from GET /v1/phone-numbers).
|
|
48
|
+
attach_number_to_sip_trunk_request = Zernio::AttachNumberToSipTrunkRequest.new({trunk_id: 'trunk_id_example'}) # AttachNumberToSipTrunkRequest |
|
|
49
|
+
|
|
50
|
+
begin
|
|
51
|
+
# Attach a number to a SIP trunk
|
|
52
|
+
result = api_instance.attach_number_to_sip_trunk(id, attach_number_to_sip_trunk_request)
|
|
53
|
+
p result
|
|
54
|
+
rescue Zernio::ApiError => e
|
|
55
|
+
puts "Error when calling VoiceApi->attach_number_to_sip_trunk: #{e}"
|
|
56
|
+
end
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
#### Using the attach_number_to_sip_trunk_with_http_info variant
|
|
60
|
+
|
|
61
|
+
This returns an Array which contains the response data, status code and headers.
|
|
62
|
+
|
|
63
|
+
> <Array(<AttachNumberToSipTrunk200Response>, Integer, Hash)> attach_number_to_sip_trunk_with_http_info(id, attach_number_to_sip_trunk_request)
|
|
64
|
+
|
|
65
|
+
```ruby
|
|
66
|
+
begin
|
|
67
|
+
# Attach a number to a SIP trunk
|
|
68
|
+
data, status_code, headers = api_instance.attach_number_to_sip_trunk_with_http_info(id, attach_number_to_sip_trunk_request)
|
|
69
|
+
p status_code # => 2xx
|
|
70
|
+
p headers # => { ... }
|
|
71
|
+
p data # => <AttachNumberToSipTrunk200Response>
|
|
72
|
+
rescue Zernio::ApiError => e
|
|
73
|
+
puts "Error when calling VoiceApi->attach_number_to_sip_trunk_with_http_info: #{e}"
|
|
74
|
+
end
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Parameters
|
|
78
|
+
|
|
79
|
+
| Name | Type | Description | Notes |
|
|
80
|
+
| ---- | ---- | ----------- | ----- |
|
|
81
|
+
| **id** | **String** | Phone number record ID (from GET /v1/phone-numbers). | |
|
|
82
|
+
| **attach_number_to_sip_trunk_request** | [**AttachNumberToSipTrunkRequest**](AttachNumberToSipTrunkRequest.md) | | |
|
|
83
|
+
|
|
84
|
+
### Return type
|
|
85
|
+
|
|
86
|
+
[**AttachNumberToSipTrunk200Response**](AttachNumberToSipTrunk200Response.md)
|
|
87
|
+
|
|
88
|
+
### Authorization
|
|
89
|
+
|
|
90
|
+
[bearerAuth](../README.md#bearerAuth)
|
|
91
|
+
|
|
92
|
+
### HTTP request headers
|
|
93
|
+
|
|
94
|
+
- **Content-Type**: application/json
|
|
95
|
+
- **Accept**: application/json
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
## create_sip_trunk
|
|
99
|
+
|
|
100
|
+
> <CreateSipTrunk201Response> create_sip_trunk(create_sip_trunk_request)
|
|
101
|
+
|
|
102
|
+
Create a SIP trunk
|
|
103
|
+
|
|
104
|
+
Creates a SIP trunk an external voice platform (Retell, ElevenLabs, Vapi, or any SIP endpoint) can import your Zernio numbers into. The trunk carries both directions: inbound calls on attached numbers are delivered to `sipHost`, and the platform originates outbound calls through `termination.uri` with the digest credentials. The `digestPassword` is returned only by this call (and by rotate-credentials); store it immediately. Attach any number of numbers to a trunk. Several trunks may point at the same host — each carries its own credentials and spend cap, so separate destination workspaces (e.g. an agency's clients) stay isolated.
|
|
105
|
+
|
|
106
|
+
### Examples
|
|
107
|
+
|
|
108
|
+
```ruby
|
|
109
|
+
require 'time'
|
|
110
|
+
require 'zernio-sdk'
|
|
111
|
+
# setup authorization
|
|
112
|
+
Zernio.configure do |config|
|
|
113
|
+
# Configure Bearer authorization (JWT): bearerAuth
|
|
114
|
+
config.access_token = 'YOUR_BEARER_TOKEN'
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
api_instance = Zernio::VoiceApi.new
|
|
118
|
+
create_sip_trunk_request = Zernio::CreateSipTrunkRequest.new({label: 'label_example', sip_host: 'sip_host_example'}) # CreateSipTrunkRequest |
|
|
119
|
+
|
|
120
|
+
begin
|
|
121
|
+
# Create a SIP trunk
|
|
122
|
+
result = api_instance.create_sip_trunk(create_sip_trunk_request)
|
|
123
|
+
p result
|
|
124
|
+
rescue Zernio::ApiError => e
|
|
125
|
+
puts "Error when calling VoiceApi->create_sip_trunk: #{e}"
|
|
126
|
+
end
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### Using the create_sip_trunk_with_http_info variant
|
|
130
|
+
|
|
131
|
+
This returns an Array which contains the response data, status code and headers.
|
|
132
|
+
|
|
133
|
+
> <Array(<CreateSipTrunk201Response>, Integer, Hash)> create_sip_trunk_with_http_info(create_sip_trunk_request)
|
|
134
|
+
|
|
135
|
+
```ruby
|
|
136
|
+
begin
|
|
137
|
+
# Create a SIP trunk
|
|
138
|
+
data, status_code, headers = api_instance.create_sip_trunk_with_http_info(create_sip_trunk_request)
|
|
139
|
+
p status_code # => 2xx
|
|
140
|
+
p headers # => { ... }
|
|
141
|
+
p data # => <CreateSipTrunk201Response>
|
|
142
|
+
rescue Zernio::ApiError => e
|
|
143
|
+
puts "Error when calling VoiceApi->create_sip_trunk_with_http_info: #{e}"
|
|
144
|
+
end
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Parameters
|
|
148
|
+
|
|
149
|
+
| Name | Type | Description | Notes |
|
|
150
|
+
| ---- | ---- | ----------- | ----- |
|
|
151
|
+
| **create_sip_trunk_request** | [**CreateSipTrunkRequest**](CreateSipTrunkRequest.md) | | |
|
|
152
|
+
|
|
153
|
+
### Return type
|
|
154
|
+
|
|
155
|
+
[**CreateSipTrunk201Response**](CreateSipTrunk201Response.md)
|
|
156
|
+
|
|
157
|
+
### Authorization
|
|
158
|
+
|
|
159
|
+
[bearerAuth](../README.md#bearerAuth)
|
|
160
|
+
|
|
161
|
+
### HTTP request headers
|
|
162
|
+
|
|
163
|
+
- **Content-Type**: application/json
|
|
164
|
+
- **Accept**: application/json
|
|
165
|
+
|
|
166
|
+
|
|
20
167
|
## create_voice_call
|
|
21
168
|
|
|
22
169
|
> <CreateVoiceCall200Response> create_voice_call(create_voice_call_request, opts)
|
|
@@ -156,6 +303,144 @@ This endpoint does not need any parameter.
|
|
|
156
303
|
- **Accept**: application/json
|
|
157
304
|
|
|
158
305
|
|
|
306
|
+
## delete_sip_trunk
|
|
307
|
+
|
|
308
|
+
> <DeleteSmsSenderId200Response> delete_sip_trunk(id)
|
|
309
|
+
|
|
310
|
+
Delete a SIP trunk
|
|
311
|
+
|
|
312
|
+
Tears down the trunk and its carrier-side objects. Refused while any number is still attached: detach them first.
|
|
313
|
+
|
|
314
|
+
### Examples
|
|
315
|
+
|
|
316
|
+
```ruby
|
|
317
|
+
require 'time'
|
|
318
|
+
require 'zernio-sdk'
|
|
319
|
+
# setup authorization
|
|
320
|
+
Zernio.configure do |config|
|
|
321
|
+
# Configure Bearer authorization (JWT): bearerAuth
|
|
322
|
+
config.access_token = 'YOUR_BEARER_TOKEN'
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
api_instance = Zernio::VoiceApi.new
|
|
326
|
+
id = 'id_example' # String |
|
|
327
|
+
|
|
328
|
+
begin
|
|
329
|
+
# Delete a SIP trunk
|
|
330
|
+
result = api_instance.delete_sip_trunk(id)
|
|
331
|
+
p result
|
|
332
|
+
rescue Zernio::ApiError => e
|
|
333
|
+
puts "Error when calling VoiceApi->delete_sip_trunk: #{e}"
|
|
334
|
+
end
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
#### Using the delete_sip_trunk_with_http_info variant
|
|
338
|
+
|
|
339
|
+
This returns an Array which contains the response data, status code and headers.
|
|
340
|
+
|
|
341
|
+
> <Array(<DeleteSmsSenderId200Response>, Integer, Hash)> delete_sip_trunk_with_http_info(id)
|
|
342
|
+
|
|
343
|
+
```ruby
|
|
344
|
+
begin
|
|
345
|
+
# Delete a SIP trunk
|
|
346
|
+
data, status_code, headers = api_instance.delete_sip_trunk_with_http_info(id)
|
|
347
|
+
p status_code # => 2xx
|
|
348
|
+
p headers # => { ... }
|
|
349
|
+
p data # => <DeleteSmsSenderId200Response>
|
|
350
|
+
rescue Zernio::ApiError => e
|
|
351
|
+
puts "Error when calling VoiceApi->delete_sip_trunk_with_http_info: #{e}"
|
|
352
|
+
end
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Parameters
|
|
356
|
+
|
|
357
|
+
| Name | Type | Description | Notes |
|
|
358
|
+
| ---- | ---- | ----------- | ----- |
|
|
359
|
+
| **id** | **String** | | |
|
|
360
|
+
|
|
361
|
+
### Return type
|
|
362
|
+
|
|
363
|
+
[**DeleteSmsSenderId200Response**](DeleteSmsSenderId200Response.md)
|
|
364
|
+
|
|
365
|
+
### Authorization
|
|
366
|
+
|
|
367
|
+
[bearerAuth](../README.md#bearerAuth)
|
|
368
|
+
|
|
369
|
+
### HTTP request headers
|
|
370
|
+
|
|
371
|
+
- **Content-Type**: Not defined
|
|
372
|
+
- **Accept**: application/json
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
## detach_number_from_sip_trunk
|
|
376
|
+
|
|
377
|
+
> <DetachNumberFromSipTrunk200Response> detach_number_from_sip_trunk(id)
|
|
378
|
+
|
|
379
|
+
Detach a number from its SIP trunk
|
|
380
|
+
|
|
381
|
+
Returns the number's calls to Zernio routing. Idempotent when the number is not attached to any trunk.
|
|
382
|
+
|
|
383
|
+
### Examples
|
|
384
|
+
|
|
385
|
+
```ruby
|
|
386
|
+
require 'time'
|
|
387
|
+
require 'zernio-sdk'
|
|
388
|
+
# setup authorization
|
|
389
|
+
Zernio.configure do |config|
|
|
390
|
+
# Configure Bearer authorization (JWT): bearerAuth
|
|
391
|
+
config.access_token = 'YOUR_BEARER_TOKEN'
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
api_instance = Zernio::VoiceApi.new
|
|
395
|
+
id = 'id_example' # String |
|
|
396
|
+
|
|
397
|
+
begin
|
|
398
|
+
# Detach a number from its SIP trunk
|
|
399
|
+
result = api_instance.detach_number_from_sip_trunk(id)
|
|
400
|
+
p result
|
|
401
|
+
rescue Zernio::ApiError => e
|
|
402
|
+
puts "Error when calling VoiceApi->detach_number_from_sip_trunk: #{e}"
|
|
403
|
+
end
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
#### Using the detach_number_from_sip_trunk_with_http_info variant
|
|
407
|
+
|
|
408
|
+
This returns an Array which contains the response data, status code and headers.
|
|
409
|
+
|
|
410
|
+
> <Array(<DetachNumberFromSipTrunk200Response>, Integer, Hash)> detach_number_from_sip_trunk_with_http_info(id)
|
|
411
|
+
|
|
412
|
+
```ruby
|
|
413
|
+
begin
|
|
414
|
+
# Detach a number from its SIP trunk
|
|
415
|
+
data, status_code, headers = api_instance.detach_number_from_sip_trunk_with_http_info(id)
|
|
416
|
+
p status_code # => 2xx
|
|
417
|
+
p headers # => { ... }
|
|
418
|
+
p data # => <DetachNumberFromSipTrunk200Response>
|
|
419
|
+
rescue Zernio::ApiError => e
|
|
420
|
+
puts "Error when calling VoiceApi->detach_number_from_sip_trunk_with_http_info: #{e}"
|
|
421
|
+
end
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### Parameters
|
|
425
|
+
|
|
426
|
+
| Name | Type | Description | Notes |
|
|
427
|
+
| ---- | ---- | ----------- | ----- |
|
|
428
|
+
| **id** | **String** | | |
|
|
429
|
+
|
|
430
|
+
### Return type
|
|
431
|
+
|
|
432
|
+
[**DetachNumberFromSipTrunk200Response**](DetachNumberFromSipTrunk200Response.md)
|
|
433
|
+
|
|
434
|
+
### Authorization
|
|
435
|
+
|
|
436
|
+
[bearerAuth](../README.md#bearerAuth)
|
|
437
|
+
|
|
438
|
+
### HTTP request headers
|
|
439
|
+
|
|
440
|
+
- **Content-Type**: Not defined
|
|
441
|
+
- **Accept**: application/json
|
|
442
|
+
|
|
443
|
+
|
|
159
444
|
## dial_voice_web_call
|
|
160
445
|
|
|
161
446
|
> <DialVoiceWebCall200Response> dial_voice_web_call(dial_voice_web_call_request)
|
|
@@ -436,6 +721,73 @@ end
|
|
|
436
721
|
- **Accept**: application/json
|
|
437
722
|
|
|
438
723
|
|
|
724
|
+
## get_sip_trunk
|
|
725
|
+
|
|
726
|
+
> <GetSipTrunk200Response> get_sip_trunk(id)
|
|
727
|
+
|
|
728
|
+
Get a SIP trunk
|
|
729
|
+
|
|
730
|
+
### Examples
|
|
731
|
+
|
|
732
|
+
```ruby
|
|
733
|
+
require 'time'
|
|
734
|
+
require 'zernio-sdk'
|
|
735
|
+
# setup authorization
|
|
736
|
+
Zernio.configure do |config|
|
|
737
|
+
# Configure Bearer authorization (JWT): bearerAuth
|
|
738
|
+
config.access_token = 'YOUR_BEARER_TOKEN'
|
|
739
|
+
end
|
|
740
|
+
|
|
741
|
+
api_instance = Zernio::VoiceApi.new
|
|
742
|
+
id = 'id_example' # String |
|
|
743
|
+
|
|
744
|
+
begin
|
|
745
|
+
# Get a SIP trunk
|
|
746
|
+
result = api_instance.get_sip_trunk(id)
|
|
747
|
+
p result
|
|
748
|
+
rescue Zernio::ApiError => e
|
|
749
|
+
puts "Error when calling VoiceApi->get_sip_trunk: #{e}"
|
|
750
|
+
end
|
|
751
|
+
```
|
|
752
|
+
|
|
753
|
+
#### Using the get_sip_trunk_with_http_info variant
|
|
754
|
+
|
|
755
|
+
This returns an Array which contains the response data, status code and headers.
|
|
756
|
+
|
|
757
|
+
> <Array(<GetSipTrunk200Response>, Integer, Hash)> get_sip_trunk_with_http_info(id)
|
|
758
|
+
|
|
759
|
+
```ruby
|
|
760
|
+
begin
|
|
761
|
+
# Get a SIP trunk
|
|
762
|
+
data, status_code, headers = api_instance.get_sip_trunk_with_http_info(id)
|
|
763
|
+
p status_code # => 2xx
|
|
764
|
+
p headers # => { ... }
|
|
765
|
+
p data # => <GetSipTrunk200Response>
|
|
766
|
+
rescue Zernio::ApiError => e
|
|
767
|
+
puts "Error when calling VoiceApi->get_sip_trunk_with_http_info: #{e}"
|
|
768
|
+
end
|
|
769
|
+
```
|
|
770
|
+
|
|
771
|
+
### Parameters
|
|
772
|
+
|
|
773
|
+
| Name | Type | Description | Notes |
|
|
774
|
+
| ---- | ---- | ----------- | ----- |
|
|
775
|
+
| **id** | **String** | | |
|
|
776
|
+
|
|
777
|
+
### Return type
|
|
778
|
+
|
|
779
|
+
[**GetSipTrunk200Response**](GetSipTrunk200Response.md)
|
|
780
|
+
|
|
781
|
+
### Authorization
|
|
782
|
+
|
|
783
|
+
[bearerAuth](../README.md#bearerAuth)
|
|
784
|
+
|
|
785
|
+
### HTTP request headers
|
|
786
|
+
|
|
787
|
+
- **Content-Type**: Not defined
|
|
788
|
+
- **Accept**: application/json
|
|
789
|
+
|
|
790
|
+
|
|
439
791
|
## get_voice_call
|
|
440
792
|
|
|
441
793
|
> <GetVoiceCall200Response> get_voice_call(id)
|
|
@@ -655,6 +1007,70 @@ end
|
|
|
655
1007
|
- **Accept**: application/json
|
|
656
1008
|
|
|
657
1009
|
|
|
1010
|
+
## list_sip_trunks
|
|
1011
|
+
|
|
1012
|
+
> <ListSipTrunks200Response> list_sip_trunks
|
|
1013
|
+
|
|
1014
|
+
List SIP trunks
|
|
1015
|
+
|
|
1016
|
+
### Examples
|
|
1017
|
+
|
|
1018
|
+
```ruby
|
|
1019
|
+
require 'time'
|
|
1020
|
+
require 'zernio-sdk'
|
|
1021
|
+
# setup authorization
|
|
1022
|
+
Zernio.configure do |config|
|
|
1023
|
+
# Configure Bearer authorization (JWT): bearerAuth
|
|
1024
|
+
config.access_token = 'YOUR_BEARER_TOKEN'
|
|
1025
|
+
end
|
|
1026
|
+
|
|
1027
|
+
api_instance = Zernio::VoiceApi.new
|
|
1028
|
+
|
|
1029
|
+
begin
|
|
1030
|
+
# List SIP trunks
|
|
1031
|
+
result = api_instance.list_sip_trunks
|
|
1032
|
+
p result
|
|
1033
|
+
rescue Zernio::ApiError => e
|
|
1034
|
+
puts "Error when calling VoiceApi->list_sip_trunks: #{e}"
|
|
1035
|
+
end
|
|
1036
|
+
```
|
|
1037
|
+
|
|
1038
|
+
#### Using the list_sip_trunks_with_http_info variant
|
|
1039
|
+
|
|
1040
|
+
This returns an Array which contains the response data, status code and headers.
|
|
1041
|
+
|
|
1042
|
+
> <Array(<ListSipTrunks200Response>, Integer, Hash)> list_sip_trunks_with_http_info
|
|
1043
|
+
|
|
1044
|
+
```ruby
|
|
1045
|
+
begin
|
|
1046
|
+
# List SIP trunks
|
|
1047
|
+
data, status_code, headers = api_instance.list_sip_trunks_with_http_info
|
|
1048
|
+
p status_code # => 2xx
|
|
1049
|
+
p headers # => { ... }
|
|
1050
|
+
p data # => <ListSipTrunks200Response>
|
|
1051
|
+
rescue Zernio::ApiError => e
|
|
1052
|
+
puts "Error when calling VoiceApi->list_sip_trunks_with_http_info: #{e}"
|
|
1053
|
+
end
|
|
1054
|
+
```
|
|
1055
|
+
|
|
1056
|
+
### Parameters
|
|
1057
|
+
|
|
1058
|
+
This endpoint does not need any parameter.
|
|
1059
|
+
|
|
1060
|
+
### Return type
|
|
1061
|
+
|
|
1062
|
+
[**ListSipTrunks200Response**](ListSipTrunks200Response.md)
|
|
1063
|
+
|
|
1064
|
+
### Authorization
|
|
1065
|
+
|
|
1066
|
+
[bearerAuth](../README.md#bearerAuth)
|
|
1067
|
+
|
|
1068
|
+
### HTTP request headers
|
|
1069
|
+
|
|
1070
|
+
- **Content-Type**: Not defined
|
|
1071
|
+
- **Accept**: application/json
|
|
1072
|
+
|
|
1073
|
+
|
|
658
1074
|
## list_voice_calls
|
|
659
1075
|
|
|
660
1076
|
> <ListVoiceCalls200Response> list_voice_calls(opts)
|
|
@@ -734,6 +1150,75 @@ end
|
|
|
734
1150
|
- **Accept**: application/json
|
|
735
1151
|
|
|
736
1152
|
|
|
1153
|
+
## rotate_sip_trunk_credentials
|
|
1154
|
+
|
|
1155
|
+
> <RotateSipTrunkCredentials200Response> rotate_sip_trunk_credentials(id)
|
|
1156
|
+
|
|
1157
|
+
Rotate a SIP trunk's password
|
|
1158
|
+
|
|
1159
|
+
Mints a new digest password on the trunk. The old password stops working immediately, so update the destination platform right away.
|
|
1160
|
+
|
|
1161
|
+
### Examples
|
|
1162
|
+
|
|
1163
|
+
```ruby
|
|
1164
|
+
require 'time'
|
|
1165
|
+
require 'zernio-sdk'
|
|
1166
|
+
# setup authorization
|
|
1167
|
+
Zernio.configure do |config|
|
|
1168
|
+
# Configure Bearer authorization (JWT): bearerAuth
|
|
1169
|
+
config.access_token = 'YOUR_BEARER_TOKEN'
|
|
1170
|
+
end
|
|
1171
|
+
|
|
1172
|
+
api_instance = Zernio::VoiceApi.new
|
|
1173
|
+
id = 'id_example' # String |
|
|
1174
|
+
|
|
1175
|
+
begin
|
|
1176
|
+
# Rotate a SIP trunk's password
|
|
1177
|
+
result = api_instance.rotate_sip_trunk_credentials(id)
|
|
1178
|
+
p result
|
|
1179
|
+
rescue Zernio::ApiError => e
|
|
1180
|
+
puts "Error when calling VoiceApi->rotate_sip_trunk_credentials: #{e}"
|
|
1181
|
+
end
|
|
1182
|
+
```
|
|
1183
|
+
|
|
1184
|
+
#### Using the rotate_sip_trunk_credentials_with_http_info variant
|
|
1185
|
+
|
|
1186
|
+
This returns an Array which contains the response data, status code and headers.
|
|
1187
|
+
|
|
1188
|
+
> <Array(<RotateSipTrunkCredentials200Response>, Integer, Hash)> rotate_sip_trunk_credentials_with_http_info(id)
|
|
1189
|
+
|
|
1190
|
+
```ruby
|
|
1191
|
+
begin
|
|
1192
|
+
# Rotate a SIP trunk's password
|
|
1193
|
+
data, status_code, headers = api_instance.rotate_sip_trunk_credentials_with_http_info(id)
|
|
1194
|
+
p status_code # => 2xx
|
|
1195
|
+
p headers # => { ... }
|
|
1196
|
+
p data # => <RotateSipTrunkCredentials200Response>
|
|
1197
|
+
rescue Zernio::ApiError => e
|
|
1198
|
+
puts "Error when calling VoiceApi->rotate_sip_trunk_credentials_with_http_info: #{e}"
|
|
1199
|
+
end
|
|
1200
|
+
```
|
|
1201
|
+
|
|
1202
|
+
### Parameters
|
|
1203
|
+
|
|
1204
|
+
| Name | Type | Description | Notes |
|
|
1205
|
+
| ---- | ---- | ----------- | ----- |
|
|
1206
|
+
| **id** | **String** | | |
|
|
1207
|
+
|
|
1208
|
+
### Return type
|
|
1209
|
+
|
|
1210
|
+
[**RotateSipTrunkCredentials200Response**](RotateSipTrunkCredentials200Response.md)
|
|
1211
|
+
|
|
1212
|
+
### Authorization
|
|
1213
|
+
|
|
1214
|
+
[bearerAuth](../README.md#bearerAuth)
|
|
1215
|
+
|
|
1216
|
+
### HTTP request headers
|
|
1217
|
+
|
|
1218
|
+
- **Content-Type**: Not defined
|
|
1219
|
+
- **Accept**: application/json
|
|
1220
|
+
|
|
1221
|
+
|
|
737
1222
|
## transfer_voice_call
|
|
738
1223
|
|
|
739
1224
|
> <TransferVoiceCall200Response> transfer_voice_call(id, transfer_voice_call_request)
|
|
@@ -88,7 +88,7 @@ module Zernio
|
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
# Create post
|
|
91
|
-
# Create and optionally publish a post. Immediate posts (`publishNow: true`) include `platformPostUrl` in the response. Content is optional when media is attached, all platforms have `customContent`, every platform entry is an X Article (`platformSpecificData.article`), or every platform entry is a LinkedIn
|
|
91
|
+
# Create and optionally publish a post. Immediate posts (`publishNow: true`) include `platformPostUrl` in the response. Content is optional when media is attached, all platforms have `customContent`, every platform entry is an X Article (`platformSpecificData.article`), or every platform entry is a LinkedIn text-free reshare (`platformSpecificData.reshareUrl` with no text). See each platform's schema for media constraints. ## Idempotency Two layers of duplicate-protection apply, so safe-to-retry callers (network blips, n8n / Zapier retries, etc.) don't accidentally double-post. **1. Same-request idempotency (5-minute window).** Pass an `x-request-id` header to mark a logical request. If a second request arrives with the same `x-request-id` while the first is in-flight (or within ~5 minutes of completion), we return **HTTP 200** with the original post in the `existingPost` field — no new post is created. The official Zernio SDKs auto-generate a unique `x-request-id` per call. If you're using a generic HTTP client (curl, n8n's HTTP node, Zapier, custom code), either: - Set a unique `x-request-id` per logical call (recommended — UUIDv4 is fine) - Or simply omit the header — we'll treat each request as new **Common pitfall**: if your workflow tool uses a single execution-level request ID and reuses it across multiple HTTP nodes (e.g. one ID for the whole run, shared across 6 different platform calls), every call after the first will look like a retry of the first and return its post. Generate a fresh ID per node. **2. Content-hash dedup (24-hour window).** Independently, we hash `(platform, accountId, content + media URLs)` and reject duplicates within 24 hours with **HTTP 409**. This catches genuine \"same content posted twice to the same account\" cases regardless of `x-request-id`. Returns `error`, `accountId`, `platform`, and `existingPostId` so you can find the original. To intentionally re-post identical content within 24h, change something (the caption, the media, the account) — the dedup is keyed on the full content fingerprint. Order: same-`x-request-id` retries (200) are checked first; if no idempotency match, the content-hash dedup (409) runs.
|
|
92
92
|
# @param create_post_request [CreatePostRequest]
|
|
93
93
|
# @param [Hash] opts the optional parameters
|
|
94
94
|
# @option opts [String] :x_request_id Optional client-generated request identifier for safe retry (idempotency). When two requests carry the same value, the second is treated as a retry of the first and returns the original post (HTTP 200) instead of creating a duplicate. Window is ~5 minutes from the first request. Generate a UUID per logical call. SDKs do this automatically; HTTP clients should set it themselves or omit it. See the operation description for the full idempotency contract.
|
|
@@ -99,7 +99,7 @@ module Zernio
|
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
# Create post
|
|
102
|
-
# Create and optionally publish a post. Immediate posts (`publishNow: true`) include `platformPostUrl` in the response. Content is optional when media is attached, all platforms have `customContent`, every platform entry is an X Article (`platformSpecificData.article`), or every platform entry is a LinkedIn
|
|
102
|
+
# Create and optionally publish a post. Immediate posts (`publishNow: true`) include `platformPostUrl` in the response. Content is optional when media is attached, all platforms have `customContent`, every platform entry is an X Article (`platformSpecificData.article`), or every platform entry is a LinkedIn text-free reshare (`platformSpecificData.reshareUrl` with no text). See each platform's schema for media constraints. ## Idempotency Two layers of duplicate-protection apply, so safe-to-retry callers (network blips, n8n / Zapier retries, etc.) don't accidentally double-post. **1. Same-request idempotency (5-minute window).** Pass an `x-request-id` header to mark a logical request. If a second request arrives with the same `x-request-id` while the first is in-flight (or within ~5 minutes of completion), we return **HTTP 200** with the original post in the `existingPost` field — no new post is created. The official Zernio SDKs auto-generate a unique `x-request-id` per call. If you're using a generic HTTP client (curl, n8n's HTTP node, Zapier, custom code), either: - Set a unique `x-request-id` per logical call (recommended — UUIDv4 is fine) - Or simply omit the header — we'll treat each request as new **Common pitfall**: if your workflow tool uses a single execution-level request ID and reuses it across multiple HTTP nodes (e.g. one ID for the whole run, shared across 6 different platform calls), every call after the first will look like a retry of the first and return its post. Generate a fresh ID per node. **2. Content-hash dedup (24-hour window).** Independently, we hash `(platform, accountId, content + media URLs)` and reject duplicates within 24 hours with **HTTP 409**. This catches genuine \"same content posted twice to the same account\" cases regardless of `x-request-id`. Returns `error`, `accountId`, `platform`, and `existingPostId` so you can find the original. To intentionally re-post identical content within 24h, change something (the caption, the media, the account) — the dedup is keyed on the full content fingerprint. Order: same-`x-request-id` retries (200) are checked first; if no idempotency match, the content-hash dedup (409) runs.
|
|
103
103
|
# @param create_post_request [CreatePostRequest]
|
|
104
104
|
# @param [Hash] opts the optional parameters
|
|
105
105
|
# @option opts [String] :x_request_id Optional client-generated request identifier for safe retry (idempotency). When two requests carry the same value, the second is treated as a retry of the first and returns the original post (HTTP 200) instead of creating a duplicate. Window is ~5 minutes from the first request. Generate a UUID per logical call. SDKs do this automatically; HTTP clients should set it themselves or omit it. See the operation description for the full idempotency contract.
|