voiceml 0.9.2 → 0.9.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/README.md +17 -13
- data/lib/voiceml/client.rb +53 -13
- data/lib/voiceml/errors.rb +15 -2
- data/lib/voiceml/models/accounts.rb +47 -3
- data/lib/voiceml/models/applications.rb +6 -0
- data/lib/voiceml/models/assistants_v1.rb +40 -0
- data/lib/voiceml/models/calls.rb +4 -0
- data/lib/voiceml/models/common.rb +35 -4
- data/lib/voiceml/models/conferences.rb +8 -0
- data/lib/voiceml/models/conversations_v1.rb +131 -29
- data/lib/voiceml/models/diagnostics.rb +33 -12
- data/lib/voiceml/models/exports.rb +58 -0
- data/lib/voiceml/models/incoming_phone_numbers.rb +4 -0
- data/lib/voiceml/models/media.rb +4 -0
- data/lib/voiceml/models/messages.rb +29 -0
- data/lib/voiceml/models/messaging_v1.rb +35 -2
- data/lib/voiceml/models/monitor_v1.rb +54 -0
- data/lib/voiceml/models/notifications.rb +2 -0
- data/lib/voiceml/models/outgoing_caller_ids.rb +6 -0
- data/lib/voiceml/models/payments.rb +2 -0
- data/lib/voiceml/models/pricing.rb +38 -4
- data/lib/voiceml/models/queues.rb +8 -0
- data/lib/voiceml/models/recordings.rb +5 -1
- data/lib/voiceml/models/routes_v2.rb +6 -2
- data/lib/voiceml/models/sip.rb +34 -6
- data/lib/voiceml/models/sip_registrations.rb +49 -0
- data/lib/voiceml/models/siprec.rb +5 -17
- data/lib/voiceml/models/streams.rb +4 -16
- data/lib/voiceml/models/transcriptions.rb +35 -4
- data/lib/voiceml/models/usage_records.rb +48 -0
- data/lib/voiceml/models/user_defined_messages.rb +2 -0
- data/lib/voiceml/models/voice_v1.rb +29 -19
- data/lib/voiceml/request_validator.rb +125 -0
- data/lib/voiceml/resources/accounts.rb +75 -0
- data/lib/voiceml/resources/applications.rb +3 -1
- data/lib/voiceml/resources/assistants_v1.rb +53 -77
- data/lib/voiceml/resources/base.rb +138 -16
- data/lib/voiceml/resources/calls.rb +34 -49
- data/lib/voiceml/resources/conferences.rb +26 -5
- data/lib/voiceml/resources/conversations_v1.rb +147 -172
- data/lib/voiceml/resources/diagnostics.rb +20 -35
- data/lib/voiceml/resources/exports.rb +36 -0
- data/lib/voiceml/resources/incoming_phone_numbers.rb +53 -32
- data/lib/voiceml/resources/messages.rb +79 -15
- data/lib/voiceml/resources/messaging_v1.rb +47 -13
- data/lib/voiceml/resources/monitor_v1.rb +68 -0
- data/lib/voiceml/resources/notifications.rb +1 -1
- data/lib/voiceml/resources/outgoing_caller_ids.rb +77 -0
- data/lib/voiceml/resources/pricing.rb +13 -5
- data/lib/voiceml/resources/queues.rb +6 -5
- data/lib/voiceml/resources/recordings.rb +39 -5
- data/lib/voiceml/resources/routes_v2.rb +10 -4
- data/lib/voiceml/resources/sip.rb +30 -11
- data/lib/voiceml/resources/transcriptions.rb +40 -0
- data/lib/voiceml/resources/usage_records.rb +51 -0
- data/lib/voiceml/resources/voice_v1.rb +31 -38
- data/lib/voiceml/transport.rb +277 -230
- data/lib/voiceml/version.rb +1 -1
- data/lib/voiceml.rb +14 -15
- metadata +18 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative "base"
|
|
4
4
|
|
|
5
5
|
require_relative '../models/pricing'
|
|
6
6
|
|
|
@@ -42,6 +42,8 @@ module VoiceML
|
|
|
42
42
|
|
|
43
43
|
# `.../Countries` list + per-country fetch. `model` is the fetch body class.
|
|
44
44
|
class PricingCountriesResource
|
|
45
|
+
include V1Pages
|
|
46
|
+
include FieldMapping
|
|
45
47
|
def initialize(transport, base_path, model)
|
|
46
48
|
@transport = transport
|
|
47
49
|
@base = base_path
|
|
@@ -55,25 +57,29 @@ module VoiceML
|
|
|
55
57
|
end
|
|
56
58
|
|
|
57
59
|
def fetch(iso_country)
|
|
58
|
-
@model.from_hash(@transport.request(:get, "#{@base}/#{iso_country}"))
|
|
60
|
+
@model.from_hash(@transport.request(:get, "#{@base}/#{encode_path_segment(iso_country)}"))
|
|
59
61
|
end
|
|
60
62
|
end
|
|
61
63
|
|
|
62
64
|
# `/v1/Voice/Numbers/{Number}` — single-number fetch.
|
|
63
65
|
class PricingV1VoiceNumbersResource
|
|
66
|
+
include V1Pages
|
|
67
|
+
include FieldMapping
|
|
64
68
|
def initialize(transport)
|
|
65
69
|
@transport = transport
|
|
66
70
|
end
|
|
67
71
|
|
|
68
72
|
def fetch(number)
|
|
69
73
|
PricingVoiceNumber.from_hash(
|
|
70
|
-
@transport.request(:get, "/v1/Voice/Numbers/#{
|
|
74
|
+
@transport.request(:get, "/v1/Voice/Numbers/#{encode_path_segment(number)}")
|
|
71
75
|
)
|
|
72
76
|
end
|
|
73
77
|
end
|
|
74
78
|
|
|
75
79
|
# `/v2/Voice/Numbers/{Destination}` — origin-aware single-number fetch.
|
|
76
80
|
class PricingV2VoiceNumbersResource
|
|
81
|
+
include V1Pages
|
|
82
|
+
include FieldMapping
|
|
77
83
|
def initialize(transport)
|
|
78
84
|
@transport = transport
|
|
79
85
|
end
|
|
@@ -82,7 +88,7 @@ module VoiceML
|
|
|
82
88
|
params = {}
|
|
83
89
|
params['OriginationNumber'] = origination_number unless origination_number.nil?
|
|
84
90
|
PricingVoiceNumberV2.from_hash(
|
|
85
|
-
@transport.request(:get, "/v2/Voice/Numbers/#{
|
|
91
|
+
@transport.request(:get, "/v2/Voice/Numbers/#{encode_path_segment(destination_number)}",
|
|
86
92
|
params: params)
|
|
87
93
|
)
|
|
88
94
|
end
|
|
@@ -90,6 +96,8 @@ module VoiceML
|
|
|
90
96
|
|
|
91
97
|
# `/v2/Trunking/Numbers/{Destination}` — origin-aware single-number fetch.
|
|
92
98
|
class PricingV2TrunkingNumbersResource
|
|
99
|
+
include V1Pages
|
|
100
|
+
include FieldMapping
|
|
93
101
|
def initialize(transport)
|
|
94
102
|
@transport = transport
|
|
95
103
|
end
|
|
@@ -98,7 +106,7 @@ module VoiceML
|
|
|
98
106
|
params = {}
|
|
99
107
|
params['OriginationNumber'] = origination_number unless origination_number.nil?
|
|
100
108
|
PricingTrunkingNumber.from_hash(
|
|
101
|
-
@transport.request(:get, "/v2/Trunking/Numbers/#{
|
|
109
|
+
@transport.request(:get, "/v2/Trunking/Numbers/#{encode_path_segment(destination_number)}",
|
|
102
110
|
params: params)
|
|
103
111
|
)
|
|
104
112
|
end
|
|
@@ -47,12 +47,13 @@ module VoiceML
|
|
|
47
47
|
def each(**kwargs, &block)
|
|
48
48
|
return enum_for(:each, **kwargs) unless block
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
page = list(**kwargs)
|
|
51
51
|
loop do
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
break if
|
|
55
|
-
|
|
52
|
+
page.queues.each(&block)
|
|
53
|
+
nxt = next_page(page)
|
|
54
|
+
break if nxt.nil?
|
|
55
|
+
|
|
56
|
+
page = nxt
|
|
56
57
|
end
|
|
57
58
|
end
|
|
58
59
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative 'base'
|
|
4
4
|
require_relative '../models/recordings'
|
|
5
|
+
require_relative '../models/transcriptions'
|
|
5
6
|
|
|
6
7
|
module VoiceML
|
|
7
8
|
# Account-scoped `/Recordings` operations.
|
|
@@ -26,6 +27,15 @@ module VoiceML
|
|
|
26
27
|
'IncludeSoftDeleted' => :include_soft_deleted
|
|
27
28
|
}.freeze
|
|
28
29
|
|
|
30
|
+
LIST_TRANSCRIPTIONS_FIELDS = {
|
|
31
|
+
'DateCreated' => :date_created,
|
|
32
|
+
'DateCreated<' => :date_created_lt,
|
|
33
|
+
'DateCreated>' => :date_created_gt,
|
|
34
|
+
'Page' => :page,
|
|
35
|
+
'PageSize' => :page_size,
|
|
36
|
+
'PageToken' => :page_token
|
|
37
|
+
}.freeze
|
|
38
|
+
|
|
29
39
|
# @return [VoiceML::RecordingList]
|
|
30
40
|
def list(**kwargs)
|
|
31
41
|
RecordingList.from_hash(
|
|
@@ -38,12 +48,13 @@ module VoiceML
|
|
|
38
48
|
def each(**kwargs, &block)
|
|
39
49
|
return enum_for(:each, **kwargs) unless block
|
|
40
50
|
|
|
41
|
-
|
|
51
|
+
page = list(**kwargs)
|
|
42
52
|
loop do
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
break if
|
|
46
|
-
|
|
53
|
+
page.recordings.each(&block)
|
|
54
|
+
nxt = next_page(page)
|
|
55
|
+
break if nxt.nil?
|
|
56
|
+
|
|
57
|
+
page = nxt
|
|
47
58
|
end
|
|
48
59
|
end
|
|
49
60
|
|
|
@@ -85,5 +96,28 @@ module VoiceML
|
|
|
85
96
|
@transport.request(:delete, path('Recordings', recording_sid))
|
|
86
97
|
nil
|
|
87
98
|
end
|
|
99
|
+
|
|
100
|
+
# --- Recording-scoped stored transcriptions ---
|
|
101
|
+
|
|
102
|
+
# @return [VoiceML::TranscriptionList]
|
|
103
|
+
def list_transcriptions(recording_sid, **kwargs)
|
|
104
|
+
TranscriptionList.from_hash(
|
|
105
|
+
@transport.request(:get, path('Recordings', recording_sid, 'Transcriptions'),
|
|
106
|
+
params: form_params(LIST_TRANSCRIPTIONS_FIELDS, kwargs))
|
|
107
|
+
)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# @return [VoiceML::Transcription]
|
|
111
|
+
def get_transcription(recording_sid, sid)
|
|
112
|
+
Transcription.from_hash(
|
|
113
|
+
@transport.request(:get, path('Recordings', recording_sid, 'Transcriptions', sid))
|
|
114
|
+
)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# @return [nil]
|
|
118
|
+
def delete_transcription(recording_sid, sid)
|
|
119
|
+
@transport.request(:delete, path('Recordings', recording_sid, 'Transcriptions', sid))
|
|
120
|
+
nil
|
|
121
|
+
end
|
|
88
122
|
end
|
|
89
123
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
3
5
|
require_relative '../models/routes_v2'
|
|
4
6
|
|
|
5
7
|
module VoiceML
|
|
@@ -16,38 +18,42 @@ module VoiceML
|
|
|
16
18
|
# Operations on /v2/SipDomains/{SipDomain}. Keyed by domain name; account
|
|
17
19
|
# is resolved from HTTP Basic auth.
|
|
18
20
|
class RoutesV2SipDomainsResource
|
|
21
|
+
include V1Pages
|
|
22
|
+
include FieldMapping
|
|
19
23
|
def initialize(transport)
|
|
20
24
|
@transport = transport
|
|
21
25
|
end
|
|
22
26
|
|
|
23
27
|
def fetch(domain_name)
|
|
24
|
-
RoutesV2SipDomain.from_hash(@transport.request(:get, "/v2/SipDomains/#{domain_name}"))
|
|
28
|
+
RoutesV2SipDomain.from_hash(@transport.request(:get, "/v2/SipDomains/#{encode_path_segment(domain_name)}"))
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
def update(domain_name, voice_region: nil, friendly_name: nil)
|
|
28
32
|
form = {}
|
|
29
33
|
form['VoiceRegion'] = voice_region unless voice_region.nil?
|
|
30
34
|
form['FriendlyName'] = friendly_name unless friendly_name.nil?
|
|
31
|
-
RoutesV2SipDomain.from_hash(@transport.request(:post, "/v2/SipDomains/#{domain_name}", form: form))
|
|
35
|
+
RoutesV2SipDomain.from_hash(@transport.request(:post, "/v2/SipDomains/#{encode_path_segment(domain_name)}", form: form))
|
|
32
36
|
end
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
# Operations on /v2/PhoneNumbers/{PhoneNumber}. Keyed by E.164 phone number or
|
|
36
40
|
# its PN sid; account resolved from HTTP Basic auth.
|
|
37
41
|
class RoutesV2PhoneNumbersResource
|
|
42
|
+
include V1Pages
|
|
43
|
+
include FieldMapping
|
|
38
44
|
def initialize(transport)
|
|
39
45
|
@transport = transport
|
|
40
46
|
end
|
|
41
47
|
|
|
42
48
|
def fetch(phone_number)
|
|
43
|
-
RoutesV2PhoneNumber.from_hash(@transport.request(:get, "/v2/PhoneNumbers/#{phone_number}"))
|
|
49
|
+
RoutesV2PhoneNumber.from_hash(@transport.request(:get, "/v2/PhoneNumbers/#{encode_path_segment(phone_number)}"))
|
|
44
50
|
end
|
|
45
51
|
|
|
46
52
|
def update(phone_number, voice_region: nil, friendly_name: nil)
|
|
47
53
|
form = {}
|
|
48
54
|
form['VoiceRegion'] = voice_region unless voice_region.nil?
|
|
49
55
|
form['FriendlyName'] = friendly_name unless friendly_name.nil?
|
|
50
|
-
RoutesV2PhoneNumber.from_hash(@transport.request(:post, "/v2/PhoneNumbers/#{phone_number}", form: form))
|
|
56
|
+
RoutesV2PhoneNumber.from_hash(@transport.request(:post, "/v2/PhoneNumbers/#{encode_path_segment(phone_number)}", form: form))
|
|
51
57
|
end
|
|
52
58
|
end
|
|
53
59
|
end
|
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative 'base'
|
|
4
4
|
require_relative '../models/sip'
|
|
5
|
+
require_relative '../models/sip_registrations'
|
|
5
6
|
|
|
6
7
|
module VoiceML
|
|
7
8
|
# `client.sip` — top-level SIP Trunking holder.
|
|
8
9
|
class SipResource
|
|
9
|
-
attr_reader :domains, :credential_lists, :ip_access_control_lists
|
|
10
|
+
attr_reader :domains, :credential_lists, :ip_access_control_lists, :registrations
|
|
10
11
|
|
|
11
12
|
def initialize(transport)
|
|
12
13
|
@domains = SipDomainsResource.new(transport)
|
|
13
14
|
@credential_lists = SipCredentialListsResource.new(transport)
|
|
14
15
|
@ip_access_control_lists = SipIpAccessControlListsResource.new(transport)
|
|
16
|
+
@registrations = SipRegistrationsResource.new(transport)
|
|
15
17
|
end
|
|
16
18
|
end
|
|
17
19
|
|
|
@@ -33,9 +35,10 @@ module VoiceML
|
|
|
33
35
|
}.freeze
|
|
34
36
|
|
|
35
37
|
PAGE_FIELDS = { 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
|
|
38
|
+
LIST_FIELDS = { 'FriendlyName' => :friendly_name, 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
|
|
36
39
|
|
|
37
40
|
def list(**kwargs)
|
|
38
|
-
SipDomainList.new(@transport.request(:get, path('SIP', 'Domains'), params: form_params(
|
|
41
|
+
SipDomainList.new(@transport.request(:get, path('SIP', 'Domains'), params: form_params(LIST_FIELDS, kwargs)))
|
|
39
42
|
end
|
|
40
43
|
|
|
41
44
|
def create(domain_name:, **kwargs)
|
|
@@ -130,12 +133,14 @@ module VoiceML
|
|
|
130
133
|
# /SIP/CredentialLists + /Credentials sub-resource.
|
|
131
134
|
class SipCredentialListsResource < BaseResource
|
|
132
135
|
PAGE_FIELDS = { 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
|
|
136
|
+
LIST_FIELDS = { 'FriendlyName' => :friendly_name, 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
|
|
133
137
|
|
|
134
138
|
def list(**kwargs)
|
|
135
|
-
SipCredentialListList.new(@transport.request(:get, path('SIP', 'CredentialLists'), params: form_params(
|
|
139
|
+
SipCredentialListList.new(@transport.request(:get, path('SIP', 'CredentialLists'), params: form_params(LIST_FIELDS, kwargs)))
|
|
136
140
|
end
|
|
137
|
-
def create(friendly_name:)
|
|
138
|
-
|
|
141
|
+
def create(friendly_name: nil)
|
|
142
|
+
form = friendly_name.nil? ? {} : { 'FriendlyName' => friendly_name }
|
|
143
|
+
SipCredentialList.from_hash(@transport.request(:post, path('SIP', 'CredentialLists'), form: form))
|
|
139
144
|
end
|
|
140
145
|
def fetch(credential_list_sid)
|
|
141
146
|
SipCredentialList.from_hash(@transport.request(:get, path('SIP', 'CredentialLists', credential_list_sid)))
|
|
@@ -158,8 +163,9 @@ module VoiceML
|
|
|
158
163
|
def fetch_credential(credential_list_sid, credential_sid)
|
|
159
164
|
SipCredential.from_hash(@transport.request(:get, path('SIP', 'CredentialLists', credential_list_sid, 'Credentials', credential_sid)))
|
|
160
165
|
end
|
|
161
|
-
def update_credential(credential_list_sid, credential_sid, password:)
|
|
162
|
-
|
|
166
|
+
def update_credential(credential_list_sid, credential_sid, password: nil)
|
|
167
|
+
form = password.nil? ? {} : { 'Password' => password }
|
|
168
|
+
SipCredential.from_hash(@transport.request(:post, path('SIP', 'CredentialLists', credential_list_sid, 'Credentials', credential_sid), form: form))
|
|
163
169
|
end
|
|
164
170
|
def delete_credential(credential_list_sid, credential_sid)
|
|
165
171
|
@transport.request(:delete, path('SIP', 'CredentialLists', credential_list_sid, 'Credentials', credential_sid)); nil
|
|
@@ -169,13 +175,15 @@ module VoiceML
|
|
|
169
175
|
# /SIP/IpAccessControlLists + /IpAddresses sub-resource.
|
|
170
176
|
class SipIpAccessControlListsResource < BaseResource
|
|
171
177
|
PAGE_FIELDS = { 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
|
|
178
|
+
LIST_FIELDS = { 'FriendlyName' => :friendly_name, 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
|
|
172
179
|
IP_FIELDS = { 'FriendlyName' => :friendly_name, 'IpAddress' => :ip_address, 'CidrPrefixLength' => :cidr_prefix_length }.freeze
|
|
173
180
|
|
|
174
181
|
def list(**kwargs)
|
|
175
|
-
SipIpAccessControlListList.new(@transport.request(:get, path('SIP', 'IpAccessControlLists'), params: form_params(
|
|
182
|
+
SipIpAccessControlListList.new(@transport.request(:get, path('SIP', 'IpAccessControlLists'), params: form_params(LIST_FIELDS, kwargs)))
|
|
176
183
|
end
|
|
177
|
-
def create(friendly_name:)
|
|
178
|
-
|
|
184
|
+
def create(friendly_name: nil)
|
|
185
|
+
form = friendly_name.nil? ? {} : { 'FriendlyName' => friendly_name }
|
|
186
|
+
SipIpAccessControlList.from_hash(@transport.request(:post, path('SIP', 'IpAccessControlLists'), form: form))
|
|
179
187
|
end
|
|
180
188
|
def fetch(acl_sid)
|
|
181
189
|
SipIpAccessControlList.from_hash(@transport.request(:get, path('SIP', 'IpAccessControlLists', acl_sid)))
|
|
@@ -190,7 +198,7 @@ module VoiceML
|
|
|
190
198
|
|
|
191
199
|
# /IpAddresses sub-resource
|
|
192
200
|
def list_ip_addresses(acl_sid, **kwargs)
|
|
193
|
-
SipIpAddressList.new(@transport.request(:get, path('SIP', 'IpAccessControlLists', acl_sid, 'IpAddresses'), params: form_params(
|
|
201
|
+
SipIpAddressList.new(@transport.request(:get, path('SIP', 'IpAccessControlLists', acl_sid, 'IpAddresses'), params: form_params(LIST_FIELDS, kwargs)))
|
|
194
202
|
end
|
|
195
203
|
def create_ip_address(acl_sid, friendly_name:, ip_address:, cidr_prefix_length: nil)
|
|
196
204
|
form = { 'FriendlyName' => friendly_name, 'IpAddress' => ip_address }
|
|
@@ -207,4 +215,15 @@ module VoiceML
|
|
|
207
215
|
@transport.request(:delete, path('SIP', 'IpAccessControlLists', acl_sid, 'IpAddresses', ip_address_sid)); nil
|
|
208
216
|
end
|
|
209
217
|
end
|
|
218
|
+
|
|
219
|
+
# /SIP/Registrations — live registrations on the tenant's SIP Domains.
|
|
220
|
+
class SipRegistrationsResource < BaseResource
|
|
221
|
+
LIST_FIELDS = { 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
|
|
222
|
+
|
|
223
|
+
# @return [VoiceML::SipRegistrationList]
|
|
224
|
+
def list(**kwargs)
|
|
225
|
+
SipRegistrationList.new(@transport.request(:get, path('SIP', 'Registrations'),
|
|
226
|
+
params: form_params(LIST_FIELDS, kwargs)))
|
|
227
|
+
end
|
|
228
|
+
end
|
|
210
229
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
require_relative '../models/transcriptions'
|
|
5
|
+
|
|
6
|
+
module VoiceML
|
|
7
|
+
# Operations on the account-wide `/Transcriptions` — stored transcriptions
|
|
8
|
+
# across all recordings. Per-recording access lives on
|
|
9
|
+
# {VoiceML::RecordingsResource}; live-call start/stop on
|
|
10
|
+
# {VoiceML::CallsResource}.
|
|
11
|
+
class TranscriptionsResource < BaseResource
|
|
12
|
+
LIST_FIELDS = {
|
|
13
|
+
'DateCreated' => :date_created,
|
|
14
|
+
'DateCreated<' => :date_created_lt,
|
|
15
|
+
'DateCreated>' => :date_created_gt,
|
|
16
|
+
'Page' => :page,
|
|
17
|
+
'PageSize' => :page_size,
|
|
18
|
+
'PageToken' => :page_token
|
|
19
|
+
}.freeze
|
|
20
|
+
|
|
21
|
+
# @return [VoiceML::TranscriptionList]
|
|
22
|
+
def list(**kwargs)
|
|
23
|
+
TranscriptionList.from_hash(
|
|
24
|
+
@transport.request(:get, path('Transcriptions'),
|
|
25
|
+
params: form_params(LIST_FIELDS, kwargs))
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [VoiceML::Transcription]
|
|
30
|
+
def fetch(sid)
|
|
31
|
+
Transcription.from_hash(@transport.request(:get, path('Transcriptions', sid)))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @return [nil]
|
|
35
|
+
def delete(sid)
|
|
36
|
+
@transport.request(:delete, path('Transcriptions', sid))
|
|
37
|
+
nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
require_relative '../models/usage_records'
|
|
5
|
+
|
|
6
|
+
module VoiceML
|
|
7
|
+
# Operations on `/Usage/Records` — usage buckets over the account, with the
|
|
8
|
+
# nine fixed windows (`AllTime`, `Daily`, `LastMonth`, `Monthly`,
|
|
9
|
+
# `ThisMonth`, `Today`, `Yearly`, `Yesterday`) the API offers.
|
|
10
|
+
class UsageRecordsResource < BaseResource
|
|
11
|
+
LIST_FIELDS = {
|
|
12
|
+
'Category' => :category,
|
|
13
|
+
'StartDate' => :start_date,
|
|
14
|
+
'EndDate' => :end_date,
|
|
15
|
+
'IncludeSubaccounts' => :include_subaccounts,
|
|
16
|
+
'Page' => :page,
|
|
17
|
+
'PageSize' => :page_size,
|
|
18
|
+
'PageToken' => :page_token
|
|
19
|
+
}.freeze
|
|
20
|
+
|
|
21
|
+
WINDOWS = {
|
|
22
|
+
all_time: 'AllTime',
|
|
23
|
+
daily: 'Daily',
|
|
24
|
+
last_month: 'LastMonth',
|
|
25
|
+
monthly: 'Monthly',
|
|
26
|
+
this_month: 'ThisMonth',
|
|
27
|
+
today: 'Today',
|
|
28
|
+
yearly: 'Yearly',
|
|
29
|
+
yesterday: 'Yesterday'
|
|
30
|
+
}.freeze
|
|
31
|
+
|
|
32
|
+
# @return [VoiceML::UsageRecordList]
|
|
33
|
+
def list(**kwargs)
|
|
34
|
+
UsageRecordList.from_hash(
|
|
35
|
+
@transport.request(:get, path('Usage', 'Records'),
|
|
36
|
+
params: form_params(LIST_FIELDS, kwargs))
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
WINDOWS.each do |ruby_name, segment|
|
|
41
|
+
# @!method list_all_time(**kwargs)
|
|
42
|
+
# @return [VoiceML::UsageRecordList]
|
|
43
|
+
define_method("list_#{ruby_name}") do |**kwargs|
|
|
44
|
+
UsageRecordList.from_hash(
|
|
45
|
+
@transport.request(:get, path('Usage', 'Records', segment),
|
|
46
|
+
params: form_params(LIST_FIELDS, kwargs))
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
3
5
|
require_relative '../models/voice_v1'
|
|
4
6
|
|
|
5
7
|
module VoiceML
|
|
@@ -20,6 +22,8 @@ module VoiceML
|
|
|
20
22
|
|
|
21
23
|
# /v1/IpRecords + /v1/IpRecords/{Sid}
|
|
22
24
|
class VoiceV1IpRecordsResource
|
|
25
|
+
include V1Pages
|
|
26
|
+
include FieldMapping
|
|
23
27
|
def initialize(transport)
|
|
24
28
|
@transport = transport
|
|
25
29
|
end
|
|
@@ -38,23 +42,25 @@ module VoiceML
|
|
|
38
42
|
end
|
|
39
43
|
|
|
40
44
|
def fetch(sid)
|
|
41
|
-
VoiceV1IpRecord.from_hash(@transport.request(:get, "/v1/IpRecords/#{sid}"))
|
|
45
|
+
VoiceV1IpRecord.from_hash(@transport.request(:get, "/v1/IpRecords/#{encode_path_segment(sid)}"))
|
|
42
46
|
end
|
|
43
47
|
|
|
44
48
|
def update(sid, friendly_name: nil)
|
|
45
49
|
form = {}
|
|
46
50
|
form['FriendlyName'] = friendly_name unless friendly_name.nil?
|
|
47
|
-
VoiceV1IpRecord.from_hash(@transport.request(:post, "/v1/IpRecords/#{sid}", form: form))
|
|
51
|
+
VoiceV1IpRecord.from_hash(@transport.request(:post, "/v1/IpRecords/#{encode_path_segment(sid)}", form: form))
|
|
48
52
|
end
|
|
49
53
|
|
|
50
54
|
def delete(sid)
|
|
51
|
-
@transport.request(:delete, "/v1/IpRecords/#{sid}")
|
|
55
|
+
@transport.request(:delete, "/v1/IpRecords/#{encode_path_segment(sid)}")
|
|
52
56
|
nil
|
|
53
57
|
end
|
|
54
58
|
end
|
|
55
59
|
|
|
56
60
|
# /v1/SourceIpMappings + /v1/SourceIpMappings/{Sid}
|
|
57
61
|
class VoiceV1SourceIpMappingsResource
|
|
62
|
+
include V1Pages
|
|
63
|
+
include FieldMapping
|
|
58
64
|
def initialize(transport)
|
|
59
65
|
@transport = transport
|
|
60
66
|
end
|
|
@@ -71,22 +77,24 @@ module VoiceML
|
|
|
71
77
|
end
|
|
72
78
|
|
|
73
79
|
def fetch(sid)
|
|
74
|
-
VoiceV1SourceIpMapping.from_hash(@transport.request(:get, "/v1/SourceIpMappings/#{sid}"))
|
|
80
|
+
VoiceV1SourceIpMapping.from_hash(@transport.request(:get, "/v1/SourceIpMappings/#{encode_path_segment(sid)}"))
|
|
75
81
|
end
|
|
76
82
|
|
|
77
83
|
def update(sid, sip_domain_sid:)
|
|
78
84
|
form = { 'SipDomainSid' => sip_domain_sid }
|
|
79
|
-
VoiceV1SourceIpMapping.from_hash(@transport.request(:post, "/v1/SourceIpMappings/#{sid}", form: form))
|
|
85
|
+
VoiceV1SourceIpMapping.from_hash(@transport.request(:post, "/v1/SourceIpMappings/#{encode_path_segment(sid)}", form: form))
|
|
80
86
|
end
|
|
81
87
|
|
|
82
88
|
def delete(sid)
|
|
83
|
-
@transport.request(:delete, "/v1/SourceIpMappings/#{sid}")
|
|
89
|
+
@transport.request(:delete, "/v1/SourceIpMappings/#{encode_path_segment(sid)}")
|
|
84
90
|
nil
|
|
85
91
|
end
|
|
86
92
|
end
|
|
87
93
|
|
|
88
94
|
# /v1/ByocTrunks + /v1/ByocTrunks/{Sid}
|
|
89
95
|
class VoiceV1ByocTrunksResource
|
|
96
|
+
include V1Pages
|
|
97
|
+
include FieldMapping
|
|
90
98
|
TRUNK_FIELDS = {
|
|
91
99
|
'FriendlyName' => :friendly_name,
|
|
92
100
|
'VoiceUrl' => :voice_url,
|
|
@@ -111,38 +119,28 @@ module VoiceML
|
|
|
111
119
|
end
|
|
112
120
|
|
|
113
121
|
def create(**kwargs)
|
|
114
|
-
VoiceV1ByocTrunk.from_hash(@transport.request(:post, '/v1/ByocTrunks', form:
|
|
122
|
+
VoiceV1ByocTrunk.from_hash(@transport.request(:post, '/v1/ByocTrunks', form: form_params(TRUNK_FIELDS, kwargs)))
|
|
115
123
|
end
|
|
116
124
|
|
|
117
125
|
def fetch(sid)
|
|
118
|
-
VoiceV1ByocTrunk.from_hash(@transport.request(:get, "/v1/ByocTrunks/#{sid}"))
|
|
126
|
+
VoiceV1ByocTrunk.from_hash(@transport.request(:get, "/v1/ByocTrunks/#{encode_path_segment(sid)}"))
|
|
119
127
|
end
|
|
120
128
|
|
|
121
129
|
def update(sid, **kwargs)
|
|
122
|
-
VoiceV1ByocTrunk.from_hash(@transport.request(:post, "/v1/ByocTrunks/#{sid}", form:
|
|
130
|
+
VoiceV1ByocTrunk.from_hash(@transport.request(:post, "/v1/ByocTrunks/#{encode_path_segment(sid)}", form: form_params(TRUNK_FIELDS, kwargs)))
|
|
123
131
|
end
|
|
124
132
|
|
|
125
133
|
def delete(sid)
|
|
126
|
-
@transport.request(:delete, "/v1/ByocTrunks/#{sid}")
|
|
134
|
+
@transport.request(:delete, "/v1/ByocTrunks/#{encode_path_segment(sid)}")
|
|
127
135
|
nil
|
|
128
136
|
end
|
|
129
137
|
|
|
130
|
-
private
|
|
131
|
-
|
|
132
|
-
def build_form(kwargs)
|
|
133
|
-
out = {}
|
|
134
|
-
TRUNK_FIELDS.each do |wire, k|
|
|
135
|
-
value = kwargs[k]
|
|
136
|
-
next if value.nil?
|
|
137
|
-
|
|
138
|
-
out[wire] = value
|
|
139
|
-
end
|
|
140
|
-
out
|
|
141
|
-
end
|
|
142
138
|
end
|
|
143
139
|
|
|
144
140
|
# /v1/ConnectionPolicies + /v1/ConnectionPolicies/{Sid} + nested /Targets
|
|
145
141
|
class VoiceV1ConnectionPoliciesResource
|
|
142
|
+
include V1Pages
|
|
143
|
+
include FieldMapping
|
|
146
144
|
TARGET_FIELDS = {
|
|
147
145
|
'Target' => :target,
|
|
148
146
|
'FriendlyName' => :friendly_name,
|
|
@@ -168,17 +166,17 @@ module VoiceML
|
|
|
168
166
|
end
|
|
169
167
|
|
|
170
168
|
def fetch(sid)
|
|
171
|
-
VoiceV1ConnectionPolicy.from_hash(@transport.request(:get, "/v1/ConnectionPolicies/#{sid}"))
|
|
169
|
+
VoiceV1ConnectionPolicy.from_hash(@transport.request(:get, "/v1/ConnectionPolicies/#{encode_path_segment(sid)}"))
|
|
172
170
|
end
|
|
173
171
|
|
|
174
172
|
def update(sid, friendly_name: nil)
|
|
175
173
|
form = {}
|
|
176
174
|
form['FriendlyName'] = friendly_name unless friendly_name.nil?
|
|
177
|
-
VoiceV1ConnectionPolicy.from_hash(@transport.request(:post, "/v1/ConnectionPolicies/#{sid}", form: form))
|
|
175
|
+
VoiceV1ConnectionPolicy.from_hash(@transport.request(:post, "/v1/ConnectionPolicies/#{encode_path_segment(sid)}", form: form))
|
|
178
176
|
end
|
|
179
177
|
|
|
180
178
|
def delete(sid)
|
|
181
|
-
@transport.request(:delete, "/v1/ConnectionPolicies/#{sid}")
|
|
179
|
+
@transport.request(:delete, "/v1/ConnectionPolicies/#{encode_path_segment(sid)}")
|
|
182
180
|
nil
|
|
183
181
|
end
|
|
184
182
|
|
|
@@ -187,52 +185,47 @@ module VoiceML
|
|
|
187
185
|
params = {}
|
|
188
186
|
params['PageSize'] = page_size unless page_size.nil?
|
|
189
187
|
VoiceV1ConnectionPolicyTargetList.new(
|
|
190
|
-
@transport.request(:get, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets", params: params)
|
|
188
|
+
@transport.request(:get, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets", params: params)
|
|
191
189
|
)
|
|
192
190
|
end
|
|
193
191
|
|
|
194
192
|
def create_target(connection_policy_sid, target:, friendly_name: nil, priority: nil, weight: nil, enabled: nil)
|
|
195
193
|
kwargs = { target: target, friendly_name: friendly_name, priority: priority, weight: weight, enabled: enabled }
|
|
196
194
|
VoiceV1ConnectionPolicyTarget.from_hash(
|
|
197
|
-
@transport.request(:post, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets",
|
|
195
|
+
@transport.request(:post, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets",
|
|
198
196
|
form: build_target_form(kwargs))
|
|
199
197
|
)
|
|
200
198
|
end
|
|
201
199
|
|
|
202
200
|
def fetch_target(connection_policy_sid, sid)
|
|
203
201
|
VoiceV1ConnectionPolicyTarget.from_hash(
|
|
204
|
-
@transport.request(:get, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets/#{sid}")
|
|
202
|
+
@transport.request(:get, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets/#{encode_path_segment(sid)}")
|
|
205
203
|
)
|
|
206
204
|
end
|
|
207
205
|
|
|
208
206
|
def update_target(connection_policy_sid, sid, **kwargs)
|
|
209
207
|
VoiceV1ConnectionPolicyTarget.from_hash(
|
|
210
|
-
@transport.request(:post, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets/#{sid}",
|
|
208
|
+
@transport.request(:post, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets/#{encode_path_segment(sid)}",
|
|
211
209
|
form: build_target_form(kwargs))
|
|
212
210
|
)
|
|
213
211
|
end
|
|
214
212
|
|
|
215
213
|
def delete_target(connection_policy_sid, sid)
|
|
216
|
-
@transport.request(:delete, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets/#{sid}")
|
|
214
|
+
@transport.request(:delete, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets/#{encode_path_segment(sid)}")
|
|
217
215
|
nil
|
|
218
216
|
end
|
|
219
217
|
|
|
220
218
|
private
|
|
221
219
|
|
|
222
220
|
def build_target_form(kwargs)
|
|
223
|
-
|
|
224
|
-
TARGET_FIELDS.each do |wire, k|
|
|
225
|
-
value = kwargs[k]
|
|
226
|
-
next if value.nil?
|
|
227
|
-
|
|
228
|
-
out[wire] = value
|
|
229
|
-
end
|
|
230
|
-
out
|
|
221
|
+
form_params(TARGET_FIELDS, kwargs)
|
|
231
222
|
end
|
|
232
223
|
end
|
|
233
224
|
|
|
234
225
|
# /v1/Settings — DialingPermissions inheritance toggle (singleton).
|
|
235
226
|
class VoiceV1DialingPermissionsResource
|
|
227
|
+
include V1Pages
|
|
228
|
+
include FieldMapping
|
|
236
229
|
def initialize(transport)
|
|
237
230
|
@transport = transport
|
|
238
231
|
end
|