bandwidth-sdk 2.1.1 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +85 -70
- data/lib/bandwidth.rb +7 -1
- data/lib/bandwidth/client.rb +20 -2
- data/lib/bandwidth/configuration.rb +45 -9
- data/lib/bandwidth/http/auth/two_factor_auth_basic_auth.rb +22 -0
- data/lib/bandwidth/http/auth/web_rtc_basic_auth.rb +22 -0
- data/lib/bandwidth/http/faraday_client.rb +2 -6
- data/lib/bandwidth/messaging_lib/messaging.rb +1 -3
- data/lib/bandwidth/messaging_lib/messaging/client.rb +11 -2
- data/lib/bandwidth/messaging_lib/messaging/controllers/api_controller.rb +45 -88
- data/lib/bandwidth/messaging_lib/messaging/controllers/base_controller.rb +1 -1
- data/lib/bandwidth/messaging_lib/messaging/exceptions/{generic_client_exception.rb → messaging_exception.rb} +2 -14
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth.rb +20 -0
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth/client.rb +49 -0
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth/controllers/api_controller.rb +153 -0
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth/controllers/base_controller.rb +49 -0
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth/exceptions/invalid_request_exception.rb +29 -0
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth/models/two_factor_code_request_schema.rb +88 -0
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth/models/two_factor_messaging_response.rb +35 -0
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth/models/two_factor_verify_code_response.rb +35 -0
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth/models/two_factor_verify_request_schema.rb +94 -0
- data/lib/bandwidth/two_factor_auth_lib/two_factor_auth/models/two_factor_voice_response.rb +35 -0
- data/lib/bandwidth/utilities/file_wrapper.rb +17 -0
- data/lib/bandwidth/voice_lib/bxml/verbs/bridge.rb +22 -0
- data/lib/bandwidth/voice_lib/bxml/verbs/conference.rb +28 -0
- data/lib/bandwidth/voice_lib/bxml/verbs/gather.rb +8 -0
- data/lib/bandwidth/voice_lib/bxml/verbs/phone_number.rb +2 -0
- data/lib/bandwidth/voice_lib/bxml/verbs/record.rb +5 -1
- data/lib/bandwidth/voice_lib/bxml/verbs/send_dtmf.rb +4 -1
- data/lib/bandwidth/voice_lib/bxml/verbs/start_recording.rb +4 -1
- data/lib/bandwidth/voice_lib/voice.rb +13 -4
- data/lib/bandwidth/voice_lib/voice/client.rb +11 -2
- data/lib/bandwidth/voice_lib/voice/controllers/api_controller.rb +629 -112
- data/lib/bandwidth/voice_lib/voice/controllers/base_controller.rb +1 -1
- data/lib/bandwidth/voice_lib/voice/exceptions/{error_response_exception.rb → api_error_response_exception.rb} +3 -3
- data/lib/bandwidth/voice_lib/voice/models/api_call_response.rb +11 -2
- data/lib/bandwidth/voice_lib/voice/models/api_call_state_response.rb +164 -0
- data/lib/bandwidth/voice_lib/voice/models/api_create_call_request.rb +20 -2
- data/lib/bandwidth/voice_lib/voice/models/api_modify_call_request.rb +1 -1
- data/lib/bandwidth/voice_lib/voice/models/api_transcribe_recording_request.rb +71 -0
- data/lib/bandwidth/voice_lib/voice/models/call_engine_modify_conference_request.rb +35 -0
- data/lib/bandwidth/voice_lib/voice/models/callback_method_enum.rb +35 -0
- data/lib/bandwidth/voice_lib/voice/models/disconnect_cause_enum.rb +47 -0
- data/lib/bandwidth/voice_lib/voice/models/modify_call_recording_state.rb +1 -1
- data/lib/bandwidth/voice_lib/voice/models/recording_metadata_response.rb +35 -25
- data/lib/bandwidth/voice_lib/voice/models/state1_enum.rb +4 -7
- data/lib/bandwidth/voice_lib/voice/models/state2_enum.rb +20 -0
- data/lib/bandwidth/voice_lib/voice/models/state_enum.rb +7 -4
- data/lib/bandwidth/voice_lib/voice/models/status1_enum.rb +26 -0
- data/lib/bandwidth/voice_lib/voice/models/status2_enum.rb +32 -0
- data/lib/bandwidth/voice_lib/voice/models/status_enum.rb +17 -0
- data/lib/bandwidth/{messaging_lib/messaging/models/field_error.rb → voice_lib/voice/models/transcript.rb} +15 -15
- data/lib/bandwidth/voice_lib/voice/models/transcription.rb +62 -0
- data/lib/bandwidth/voice_lib/voice/models/transcription_response.rb +42 -0
- data/lib/bandwidth/web_rtc_lib/web_rtc.rb +21 -0
- data/lib/bandwidth/web_rtc_lib/web_rtc/client.rb +49 -0
- data/lib/bandwidth/web_rtc_lib/web_rtc/controllers/api_controller.rb +682 -0
- data/lib/bandwidth/web_rtc_lib/web_rtc/controllers/base_controller.rb +49 -0
- data/lib/bandwidth/{messaging_lib/messaging/exceptions/path_client_exception.rb → web_rtc_lib/web_rtc/exceptions/error_exception.rb} +4 -19
- data/lib/bandwidth/web_rtc_lib/web_rtc/models/accounts_participants_response.rb +47 -0
- data/lib/bandwidth/web_rtc_lib/web_rtc/models/participant.rb +83 -0
- data/lib/bandwidth/web_rtc_lib/web_rtc/models/participant_subscription.rb +35 -0
- data/lib/bandwidth/web_rtc_lib/web_rtc/models/publish_permission_enum.rb +17 -0
- data/lib/bandwidth/web_rtc_lib/web_rtc/models/session.rb +44 -0
- data/lib/bandwidth/web_rtc_lib/web_rtc/models/subscriptions.rb +54 -0
- metadata +58 -11
- data/lib/bandwidth/voice_lib/voice/models/api_get_account_recordings_metadata_request.rb +0 -65
- data/lib/bandwidth/voice_lib/voice/models/transcription_status_enum.rb +0 -20
- data/lib/bandwidth/voice_lib/voice/models/type_enum.rb +0 -32
|
@@ -28,8 +28,16 @@ module Bandwidth
|
|
|
28
28
|
s.to_bxml(xml)
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
|
+
def nest_verbs_list(xml, property)
|
|
32
|
+
if property
|
|
33
|
+
property.each do |verb|
|
|
34
|
+
verb.to_bxml(xml)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
31
38
|
embedded_xml(xml, speak_sentence, SpeakSentence)
|
|
32
39
|
embedded_xml(xml, play_audio, PlayAudio)
|
|
40
|
+
nest_verbs_list(xml, nested_verbs)
|
|
33
41
|
end
|
|
34
42
|
end
|
|
35
43
|
end
|
|
@@ -8,6 +8,8 @@ module Bandwidth
|
|
|
8
8
|
xml.PhoneNumber(number, compact_hash({
|
|
9
9
|
'transferAnswerUrl' => transfer_answer_url,
|
|
10
10
|
'transferAnswerMethod' => transfer_answer_method,
|
|
11
|
+
'transferDisconnectUrl' => transfer_disconnect_url,
|
|
12
|
+
'transferDisconnectMethod' => transfer_disconnect_method,
|
|
11
13
|
'username' => username,
|
|
12
14
|
'password' => password,
|
|
13
15
|
'tag' => tag
|
|
@@ -17,7 +17,11 @@ module Bandwidth
|
|
|
17
17
|
'recordingAvailableMethod' => recording_available_method,
|
|
18
18
|
'terminatingDigits' => terminating_digits,
|
|
19
19
|
'maxDuration' => max_duration,
|
|
20
|
-
'fileFormat' => file_format
|
|
20
|
+
'fileFormat' => file_format,
|
|
21
|
+
'transcribe' => transcribe,
|
|
22
|
+
'transcriptionAvailableUrl' => transcription_available_url,
|
|
23
|
+
'transcriptionAvailableMethod' => transcription_available_method,
|
|
24
|
+
'silenceTimeout' => silence_timeout
|
|
21
25
|
}))
|
|
22
26
|
end
|
|
23
27
|
end
|
|
@@ -14,7 +14,10 @@ module Bandwidth
|
|
|
14
14
|
'recordingAvailableUrl' => recording_available_url,
|
|
15
15
|
'recordingAvailableMethod' => recording_available_method,
|
|
16
16
|
'fileFormat' => file_format,
|
|
17
|
-
'multiChannel' => multi_channel
|
|
17
|
+
'multiChannel' => multi_channel,
|
|
18
|
+
'transcribe' => transcribe,
|
|
19
|
+
'transcriptionAvailableUrl' => transcription_available_url,
|
|
20
|
+
'transcriptionAvailableMethod' => transcription_available_method
|
|
18
21
|
}))
|
|
19
22
|
end
|
|
20
23
|
end
|
|
@@ -8,23 +8,32 @@ require_relative 'voice/client.rb'
|
|
|
8
8
|
|
|
9
9
|
# Models
|
|
10
10
|
require_relative 'voice/models/api_call_response.rb'
|
|
11
|
+
require_relative 'voice/models/api_call_state_response.rb'
|
|
11
12
|
require_relative 'voice/models/api_create_call_request.rb'
|
|
12
|
-
require_relative 'voice/models/api_get_account_recordings_metadata_request.rb'
|
|
13
13
|
require_relative 'voice/models/api_modify_call_request.rb'
|
|
14
|
+
require_relative 'voice/models/api_transcribe_recording_request.rb'
|
|
15
|
+
require_relative 'voice/models/call_engine_modify_conference_request.rb'
|
|
14
16
|
require_relative 'voice/models/modify_call_recording_state.rb'
|
|
15
17
|
require_relative 'voice/models/recording_metadata_response.rb'
|
|
18
|
+
require_relative 'voice/models/transcript.rb'
|
|
19
|
+
require_relative 'voice/models/transcription.rb'
|
|
20
|
+
require_relative 'voice/models/transcription_response.rb'
|
|
16
21
|
require_relative 'voice/models/answer_method_enum.rb'
|
|
22
|
+
require_relative 'voice/models/callback_method_enum.rb'
|
|
17
23
|
require_relative 'voice/models/direction_enum.rb'
|
|
24
|
+
require_relative 'voice/models/disconnect_cause_enum.rb'
|
|
18
25
|
require_relative 'voice/models/disconnect_method_enum.rb'
|
|
19
26
|
require_relative 'voice/models/file_format_enum.rb'
|
|
20
27
|
require_relative 'voice/models/redirect_method_enum.rb'
|
|
21
28
|
require_relative 'voice/models/state_enum.rb'
|
|
22
29
|
require_relative 'voice/models/state1_enum.rb'
|
|
23
|
-
require_relative 'voice/models/
|
|
24
|
-
require_relative 'voice/models/
|
|
30
|
+
require_relative 'voice/models/state2_enum.rb'
|
|
31
|
+
require_relative 'voice/models/status_enum.rb'
|
|
32
|
+
require_relative 'voice/models/status1_enum.rb'
|
|
33
|
+
require_relative 'voice/models/status2_enum.rb'
|
|
25
34
|
|
|
26
35
|
# Exceptions
|
|
27
|
-
require_relative 'voice/exceptions/
|
|
36
|
+
require_relative 'voice/exceptions/api_error_response_exception.rb'
|
|
28
37
|
# Controllers
|
|
29
38
|
require_relative 'voice/controllers/base_controller.rb'
|
|
30
39
|
require_relative 'voice/controllers/api_controller.rb'
|
|
@@ -19,8 +19,13 @@ module Bandwidth
|
|
|
19
19
|
backoff_factor: 1, environment: Environment::PRODUCTION,
|
|
20
20
|
messaging_basic_auth_user_name: 'TODO: Replace',
|
|
21
21
|
messaging_basic_auth_password: 'TODO: Replace',
|
|
22
|
+
two_factor_auth_basic_auth_user_name: 'TODO: Replace',
|
|
23
|
+
two_factor_auth_basic_auth_password: 'TODO: Replace',
|
|
22
24
|
voice_basic_auth_user_name: 'TODO: Replace',
|
|
23
|
-
voice_basic_auth_password: 'TODO: Replace',
|
|
25
|
+
voice_basic_auth_password: 'TODO: Replace',
|
|
26
|
+
web_rtc_basic_auth_user_name: 'TODO: Replace',
|
|
27
|
+
web_rtc_basic_auth_password: 'TODO: Replace',
|
|
28
|
+
config: nil)
|
|
24
29
|
@config = if config.nil?
|
|
25
30
|
Configuration.new(timeout: timeout,
|
|
26
31
|
max_retries: max_retries,
|
|
@@ -29,8 +34,12 @@ module Bandwidth
|
|
|
29
34
|
environment: environment,
|
|
30
35
|
messaging_basic_auth_user_name: messaging_basic_auth_user_name,
|
|
31
36
|
messaging_basic_auth_password: messaging_basic_auth_password,
|
|
37
|
+
two_factor_auth_basic_auth_user_name: two_factor_auth_basic_auth_user_name,
|
|
38
|
+
two_factor_auth_basic_auth_password: two_factor_auth_basic_auth_password,
|
|
32
39
|
voice_basic_auth_user_name: voice_basic_auth_user_name,
|
|
33
|
-
voice_basic_auth_password: voice_basic_auth_password
|
|
40
|
+
voice_basic_auth_password: voice_basic_auth_password,
|
|
41
|
+
web_rtc_basic_auth_user_name: web_rtc_basic_auth_user_name,
|
|
42
|
+
web_rtc_basic_auth_password: web_rtc_basic_auth_password)
|
|
34
43
|
else
|
|
35
44
|
config
|
|
36
45
|
end
|
|
@@ -11,7 +11,7 @@ module Voice
|
|
|
11
11
|
super(config, http_call_back: http_call_back)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
# Creates
|
|
14
|
+
# Creates an outbound call
|
|
15
15
|
# @param [String] account_id Required parameter: Example:
|
|
16
16
|
# @param [ApiCreateCallRequest] body Optional parameter: Example:
|
|
17
17
|
# @return [ApiCallResponse] response from the API call
|
|
@@ -43,36 +43,41 @@ module Voice
|
|
|
43
43
|
|
|
44
44
|
# Validate response against endpoint and global error codes.
|
|
45
45
|
if _response.status_code == 400
|
|
46
|
-
raise
|
|
47
|
-
'Something
|
|
48
|
-
' before trying again.',
|
|
46
|
+
raise ApiErrorResponseException.new(
|
|
47
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
48
|
+
' fix it before trying again.',
|
|
49
49
|
_response
|
|
50
50
|
)
|
|
51
51
|
elsif _response.status_code == 401
|
|
52
52
|
raise APIException.new(
|
|
53
|
-
'Please
|
|
53
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
54
|
+
' credentials to authenticate to the API.',
|
|
54
55
|
_response
|
|
55
56
|
)
|
|
56
57
|
elsif _response.status_code == 403
|
|
57
|
-
raise
|
|
58
|
-
'
|
|
59
|
-
|
|
58
|
+
raise ApiErrorResponseException.new(
|
|
59
|
+
'User unauthorized to perform this action.',
|
|
60
|
+
_response
|
|
61
|
+
)
|
|
62
|
+
elsif _response.status_code == 404
|
|
63
|
+
raise ApiErrorResponseException.new(
|
|
64
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
60
65
|
_response
|
|
61
66
|
)
|
|
62
67
|
elsif _response.status_code == 415
|
|
63
|
-
raise
|
|
64
|
-
'We don\'t support that media type.
|
|
65
|
-
' `application/json`.',
|
|
68
|
+
raise ApiErrorResponseException.new(
|
|
69
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
70
|
+
' please send it to us as `application/json`.',
|
|
66
71
|
_response
|
|
67
72
|
)
|
|
68
73
|
elsif _response.status_code == 429
|
|
69
|
-
raise
|
|
74
|
+
raise ApiErrorResponseException.new(
|
|
70
75
|
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
71
76
|
' slow your request rate down and try again.',
|
|
72
77
|
_response
|
|
73
78
|
)
|
|
74
79
|
elsif _response.status_code == 500
|
|
75
|
-
raise
|
|
80
|
+
raise ApiErrorResponseException.new(
|
|
76
81
|
'Something unexpected happened. Please try again.',
|
|
77
82
|
_response
|
|
78
83
|
)
|
|
@@ -84,6 +89,83 @@ module Voice
|
|
|
84
89
|
ApiResponse.new(_response, data: ApiCallResponse.from_hash(decoded))
|
|
85
90
|
end
|
|
86
91
|
|
|
92
|
+
# Returns near-realtime metadata about the specified call
|
|
93
|
+
# @param [String] account_id Required parameter: Example:
|
|
94
|
+
# @param [String] call_id Required parameter: Example:
|
|
95
|
+
# @return [ApiCallStateResponse] response from the API call
|
|
96
|
+
def get_call_state(account_id,
|
|
97
|
+
call_id)
|
|
98
|
+
# Prepare query url.
|
|
99
|
+
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
|
100
|
+
_query_builder << '/api/v2/accounts/{accountId}/calls/{callId}'
|
|
101
|
+
_query_builder = APIHelper.append_url_with_template_parameters(
|
|
102
|
+
_query_builder,
|
|
103
|
+
'accountId' => account_id,
|
|
104
|
+
'callId' => call_id
|
|
105
|
+
)
|
|
106
|
+
_query_url = APIHelper.clean_url _query_builder
|
|
107
|
+
|
|
108
|
+
# Prepare headers.
|
|
109
|
+
_headers = {
|
|
110
|
+
'accept' => 'application/json'
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# Prepare and execute HttpRequest.
|
|
114
|
+
_request = config.http_client.get(
|
|
115
|
+
_query_url,
|
|
116
|
+
headers: _headers
|
|
117
|
+
)
|
|
118
|
+
VoiceBasicAuth.apply(config, _request)
|
|
119
|
+
_response = execute_request(_request)
|
|
120
|
+
|
|
121
|
+
# Validate response against endpoint and global error codes.
|
|
122
|
+
if _response.status_code == 400
|
|
123
|
+
raise ApiErrorResponseException.new(
|
|
124
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
125
|
+
' fix it before trying again.',
|
|
126
|
+
_response
|
|
127
|
+
)
|
|
128
|
+
elsif _response.status_code == 401
|
|
129
|
+
raise APIException.new(
|
|
130
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
131
|
+
' credentials to authenticate to the API.',
|
|
132
|
+
_response
|
|
133
|
+
)
|
|
134
|
+
elsif _response.status_code == 403
|
|
135
|
+
raise ApiErrorResponseException.new(
|
|
136
|
+
'User unauthorized to perform this action.',
|
|
137
|
+
_response
|
|
138
|
+
)
|
|
139
|
+
elsif _response.status_code == 404
|
|
140
|
+
raise ApiErrorResponseException.new(
|
|
141
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
142
|
+
_response
|
|
143
|
+
)
|
|
144
|
+
elsif _response.status_code == 415
|
|
145
|
+
raise ApiErrorResponseException.new(
|
|
146
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
147
|
+
' please send it to us as `application/json`.',
|
|
148
|
+
_response
|
|
149
|
+
)
|
|
150
|
+
elsif _response.status_code == 429
|
|
151
|
+
raise ApiErrorResponseException.new(
|
|
152
|
+
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
153
|
+
' slow your request rate down and try again.',
|
|
154
|
+
_response
|
|
155
|
+
)
|
|
156
|
+
elsif _response.status_code == 500
|
|
157
|
+
raise ApiErrorResponseException.new(
|
|
158
|
+
'Something unexpected happened. Please try again.',
|
|
159
|
+
_response
|
|
160
|
+
)
|
|
161
|
+
end
|
|
162
|
+
validate_response(_response)
|
|
163
|
+
|
|
164
|
+
# Return appropriate response type.
|
|
165
|
+
decoded = APIHelper.json_deserialize(_response.raw_body)
|
|
166
|
+
ApiResponse.new(_response, data: ApiCallStateResponse.from_hash(decoded))
|
|
167
|
+
end
|
|
168
|
+
|
|
87
169
|
# Interrupts and replaces an active call's BXML document
|
|
88
170
|
# @param [String] account_id Required parameter: Example:
|
|
89
171
|
# @param [String] call_id Required parameter: Example:
|
|
@@ -118,40 +200,41 @@ module Voice
|
|
|
118
200
|
|
|
119
201
|
# Validate response against endpoint and global error codes.
|
|
120
202
|
if _response.status_code == 400
|
|
121
|
-
raise
|
|
122
|
-
'
|
|
203
|
+
raise ApiErrorResponseException.new(
|
|
204
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
205
|
+
' fix it before trying again.',
|
|
123
206
|
_response
|
|
124
207
|
)
|
|
125
208
|
elsif _response.status_code == 401
|
|
126
209
|
raise APIException.new(
|
|
127
|
-
'Please
|
|
210
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
211
|
+
' credentials to authenticate to the API.',
|
|
128
212
|
_response
|
|
129
213
|
)
|
|
130
214
|
elsif _response.status_code == 403
|
|
131
|
-
raise
|
|
132
|
-
'
|
|
133
|
-
' the Bandwidth Dashboard.',
|
|
215
|
+
raise ApiErrorResponseException.new(
|
|
216
|
+
'User unauthorized to perform this action.',
|
|
134
217
|
_response
|
|
135
218
|
)
|
|
136
219
|
elsif _response.status_code == 404
|
|
137
|
-
raise
|
|
138
|
-
'The
|
|
220
|
+
raise ApiErrorResponseException.new(
|
|
221
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
139
222
|
_response
|
|
140
223
|
)
|
|
141
224
|
elsif _response.status_code == 415
|
|
142
|
-
raise
|
|
143
|
-
'We don\'t support that media type.
|
|
144
|
-
' `application/json`.',
|
|
225
|
+
raise ApiErrorResponseException.new(
|
|
226
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
227
|
+
' please send it to us as `application/json`.',
|
|
145
228
|
_response
|
|
146
229
|
)
|
|
147
230
|
elsif _response.status_code == 429
|
|
148
|
-
raise
|
|
231
|
+
raise ApiErrorResponseException.new(
|
|
149
232
|
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
150
233
|
' slow your request rate down and try again.',
|
|
151
234
|
_response
|
|
152
235
|
)
|
|
153
236
|
elsif _response.status_code == 500
|
|
154
|
-
raise
|
|
237
|
+
raise ApiErrorResponseException.new(
|
|
155
238
|
'Something unexpected happened. Please try again.',
|
|
156
239
|
_response
|
|
157
240
|
)
|
|
@@ -196,40 +279,41 @@ module Voice
|
|
|
196
279
|
|
|
197
280
|
# Validate response against endpoint and global error codes.
|
|
198
281
|
if _response.status_code == 400
|
|
199
|
-
raise
|
|
200
|
-
'
|
|
282
|
+
raise ApiErrorResponseException.new(
|
|
283
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
284
|
+
' fix it before trying again.',
|
|
201
285
|
_response
|
|
202
286
|
)
|
|
203
287
|
elsif _response.status_code == 401
|
|
204
288
|
raise APIException.new(
|
|
205
|
-
'Please
|
|
289
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
290
|
+
' credentials to authenticate to the API.',
|
|
206
291
|
_response
|
|
207
292
|
)
|
|
208
293
|
elsif _response.status_code == 403
|
|
209
|
-
raise
|
|
210
|
-
'
|
|
211
|
-
' the Bandwidth Dashboard.',
|
|
294
|
+
raise ApiErrorResponseException.new(
|
|
295
|
+
'User unauthorized to perform this action.',
|
|
212
296
|
_response
|
|
213
297
|
)
|
|
214
298
|
elsif _response.status_code == 404
|
|
215
|
-
raise
|
|
216
|
-
'The
|
|
299
|
+
raise ApiErrorResponseException.new(
|
|
300
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
217
301
|
_response
|
|
218
302
|
)
|
|
219
303
|
elsif _response.status_code == 415
|
|
220
|
-
raise
|
|
221
|
-
'We don\'t support that media type.
|
|
222
|
-
' `application/json`.',
|
|
304
|
+
raise ApiErrorResponseException.new(
|
|
305
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
306
|
+
' please send it to us as `application/json`.',
|
|
223
307
|
_response
|
|
224
308
|
)
|
|
225
309
|
elsif _response.status_code == 429
|
|
226
|
-
raise
|
|
310
|
+
raise ApiErrorResponseException.new(
|
|
227
311
|
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
228
312
|
' slow your request rate down and try again.',
|
|
229
313
|
_response
|
|
230
314
|
)
|
|
231
315
|
elsif _response.status_code == 500
|
|
232
|
-
raise
|
|
316
|
+
raise ApiErrorResponseException.new(
|
|
233
317
|
'Something unexpected happened. Please try again.',
|
|
234
318
|
_response
|
|
235
319
|
)
|
|
@@ -244,9 +328,17 @@ module Voice
|
|
|
244
328
|
# took place during the specified call
|
|
245
329
|
# @param [String] account_id Required parameter: Example:
|
|
246
330
|
# @param [String] call_id Required parameter: Example:
|
|
331
|
+
# @param [String] from Optional parameter: Example:
|
|
332
|
+
# @param [String] to Optional parameter: Example:
|
|
333
|
+
# @param [String] min_start_time Optional parameter: Example:
|
|
334
|
+
# @param [String] max_start_time Optional parameter: Example:
|
|
247
335
|
# @return [List of RecordingMetadataResponse] response from the API call
|
|
248
336
|
def get_query_metadata_for_account_and_call(account_id,
|
|
249
|
-
call_id
|
|
337
|
+
call_id,
|
|
338
|
+
from: nil,
|
|
339
|
+
to: nil,
|
|
340
|
+
min_start_time: nil,
|
|
341
|
+
max_start_time: nil)
|
|
250
342
|
# Prepare query url.
|
|
251
343
|
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
|
252
344
|
_query_builder << '/api/v2/accounts/{accountId}/calls/{callId}/recordings'
|
|
@@ -255,6 +347,13 @@ module Voice
|
|
|
255
347
|
'accountId' => account_id,
|
|
256
348
|
'callId' => call_id
|
|
257
349
|
)
|
|
350
|
+
_query_builder = APIHelper.append_url_with_query_parameters(
|
|
351
|
+
_query_builder,
|
|
352
|
+
'from' => from,
|
|
353
|
+
'to' => to,
|
|
354
|
+
'minStartTime' => min_start_time,
|
|
355
|
+
'maxStartTime' => max_start_time
|
|
356
|
+
)
|
|
258
357
|
_query_url = APIHelper.clean_url _query_builder
|
|
259
358
|
|
|
260
359
|
# Prepare headers.
|
|
@@ -272,36 +371,41 @@ module Voice
|
|
|
272
371
|
|
|
273
372
|
# Validate response against endpoint and global error codes.
|
|
274
373
|
if _response.status_code == 400
|
|
275
|
-
raise
|
|
276
|
-
'Something
|
|
277
|
-
' before trying again.',
|
|
374
|
+
raise ApiErrorResponseException.new(
|
|
375
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
376
|
+
' fix it before trying again.',
|
|
278
377
|
_response
|
|
279
378
|
)
|
|
280
379
|
elsif _response.status_code == 401
|
|
281
380
|
raise APIException.new(
|
|
282
|
-
'Please
|
|
381
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
382
|
+
' credentials to authenticate to the API.',
|
|
283
383
|
_response
|
|
284
384
|
)
|
|
285
385
|
elsif _response.status_code == 403
|
|
286
|
-
raise
|
|
287
|
-
'
|
|
288
|
-
|
|
386
|
+
raise ApiErrorResponseException.new(
|
|
387
|
+
'User unauthorized to perform this action.',
|
|
388
|
+
_response
|
|
389
|
+
)
|
|
390
|
+
elsif _response.status_code == 404
|
|
391
|
+
raise ApiErrorResponseException.new(
|
|
392
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
289
393
|
_response
|
|
290
394
|
)
|
|
291
395
|
elsif _response.status_code == 415
|
|
292
|
-
raise
|
|
293
|
-
'We don\'t support that media type.
|
|
294
|
-
' `application/json`.',
|
|
396
|
+
raise ApiErrorResponseException.new(
|
|
397
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
398
|
+
' please send it to us as `application/json`.',
|
|
295
399
|
_response
|
|
296
400
|
)
|
|
297
401
|
elsif _response.status_code == 429
|
|
298
|
-
raise
|
|
402
|
+
raise ApiErrorResponseException.new(
|
|
299
403
|
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
300
404
|
' slow your request rate down and try again.',
|
|
301
405
|
_response
|
|
302
406
|
)
|
|
303
407
|
elsif _response.status_code == 500
|
|
304
|
-
raise
|
|
408
|
+
raise ApiErrorResponseException.new(
|
|
305
409
|
'Something unexpected happened. Please try again.',
|
|
306
410
|
_response
|
|
307
411
|
)
|
|
@@ -350,42 +454,41 @@ module Voice
|
|
|
350
454
|
|
|
351
455
|
# Validate response against endpoint and global error codes.
|
|
352
456
|
if _response.status_code == 400
|
|
353
|
-
raise
|
|
354
|
-
'Something
|
|
355
|
-
' before trying again.',
|
|
457
|
+
raise ApiErrorResponseException.new(
|
|
458
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
459
|
+
' fix it before trying again.',
|
|
356
460
|
_response
|
|
357
461
|
)
|
|
358
462
|
elsif _response.status_code == 401
|
|
359
463
|
raise APIException.new(
|
|
360
|
-
'Please
|
|
464
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
465
|
+
' credentials to authenticate to the API.',
|
|
361
466
|
_response
|
|
362
467
|
)
|
|
363
468
|
elsif _response.status_code == 403
|
|
364
|
-
raise
|
|
365
|
-
'
|
|
366
|
-
' the Bandwidth Dashboard.',
|
|
469
|
+
raise ApiErrorResponseException.new(
|
|
470
|
+
'User unauthorized to perform this action.',
|
|
367
471
|
_response
|
|
368
472
|
)
|
|
369
473
|
elsif _response.status_code == 404
|
|
370
|
-
raise
|
|
371
|
-
'The
|
|
372
|
-
' to you',
|
|
474
|
+
raise ApiErrorResponseException.new(
|
|
475
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
373
476
|
_response
|
|
374
477
|
)
|
|
375
478
|
elsif _response.status_code == 415
|
|
376
|
-
raise
|
|
377
|
-
'We don\'t support that media type.
|
|
378
|
-
' `application/json`.',
|
|
479
|
+
raise ApiErrorResponseException.new(
|
|
480
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
481
|
+
' please send it to us as `application/json`.',
|
|
379
482
|
_response
|
|
380
483
|
)
|
|
381
484
|
elsif _response.status_code == 429
|
|
382
|
-
raise
|
|
485
|
+
raise ApiErrorResponseException.new(
|
|
383
486
|
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
384
487
|
' slow your request rate down and try again.',
|
|
385
488
|
_response
|
|
386
489
|
)
|
|
387
490
|
elsif _response.status_code == 500
|
|
388
|
-
raise
|
|
491
|
+
raise ApiErrorResponseException.new(
|
|
389
492
|
'Something unexpected happened. Please try again.',
|
|
390
493
|
_response
|
|
391
494
|
)
|
|
@@ -426,42 +529,41 @@ module Voice
|
|
|
426
529
|
|
|
427
530
|
# Validate response against endpoint and global error codes.
|
|
428
531
|
if _response.status_code == 400
|
|
429
|
-
raise
|
|
430
|
-
'Something
|
|
431
|
-
' before trying again.',
|
|
532
|
+
raise ApiErrorResponseException.new(
|
|
533
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
534
|
+
' fix it before trying again.',
|
|
432
535
|
_response
|
|
433
536
|
)
|
|
434
537
|
elsif _response.status_code == 401
|
|
435
538
|
raise APIException.new(
|
|
436
|
-
'Please
|
|
539
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
540
|
+
' credentials to authenticate to the API.',
|
|
437
541
|
_response
|
|
438
542
|
)
|
|
439
543
|
elsif _response.status_code == 403
|
|
440
|
-
raise
|
|
441
|
-
'
|
|
442
|
-
' the Bandwidth Dashboard.',
|
|
544
|
+
raise ApiErrorResponseException.new(
|
|
545
|
+
'User unauthorized to perform this action.',
|
|
443
546
|
_response
|
|
444
547
|
)
|
|
445
548
|
elsif _response.status_code == 404
|
|
446
|
-
raise
|
|
447
|
-
'The
|
|
448
|
-
' to you',
|
|
549
|
+
raise ApiErrorResponseException.new(
|
|
550
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
449
551
|
_response
|
|
450
552
|
)
|
|
451
553
|
elsif _response.status_code == 415
|
|
452
|
-
raise
|
|
453
|
-
'We don\'t support that media type.
|
|
454
|
-
' `application/json`.',
|
|
554
|
+
raise ApiErrorResponseException.new(
|
|
555
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
556
|
+
' please send it to us as `application/json`.',
|
|
455
557
|
_response
|
|
456
558
|
)
|
|
457
559
|
elsif _response.status_code == 429
|
|
458
|
-
raise
|
|
560
|
+
raise ApiErrorResponseException.new(
|
|
459
561
|
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
460
562
|
' slow your request rate down and try again.',
|
|
461
563
|
_response
|
|
462
564
|
)
|
|
463
565
|
elsif _response.status_code == 500
|
|
464
|
-
raise
|
|
566
|
+
raise ApiErrorResponseException.new(
|
|
465
567
|
'Something unexpected happened. Please try again.',
|
|
466
568
|
_response
|
|
467
569
|
)
|
|
@@ -500,42 +602,41 @@ module Voice
|
|
|
500
602
|
|
|
501
603
|
# Validate response against endpoint and global error codes.
|
|
502
604
|
if _response.status_code == 400
|
|
503
|
-
raise
|
|
504
|
-
'Something
|
|
505
|
-
' before trying again.',
|
|
605
|
+
raise ApiErrorResponseException.new(
|
|
606
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
607
|
+
' fix it before trying again.',
|
|
506
608
|
_response
|
|
507
609
|
)
|
|
508
610
|
elsif _response.status_code == 401
|
|
509
611
|
raise APIException.new(
|
|
510
|
-
'Please
|
|
612
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
613
|
+
' credentials to authenticate to the API.',
|
|
511
614
|
_response
|
|
512
615
|
)
|
|
513
616
|
elsif _response.status_code == 403
|
|
514
|
-
raise
|
|
515
|
-
'
|
|
516
|
-
' the Bandwidth Dashboard.',
|
|
617
|
+
raise ApiErrorResponseException.new(
|
|
618
|
+
'User unauthorized to perform this action.',
|
|
517
619
|
_response
|
|
518
620
|
)
|
|
519
621
|
elsif _response.status_code == 404
|
|
520
|
-
raise
|
|
521
|
-
'The
|
|
522
|
-
' to you',
|
|
622
|
+
raise ApiErrorResponseException.new(
|
|
623
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
523
624
|
_response
|
|
524
625
|
)
|
|
525
626
|
elsif _response.status_code == 415
|
|
526
|
-
raise
|
|
527
|
-
'We don\'t support that media type.
|
|
528
|
-
' `application/json`.',
|
|
627
|
+
raise ApiErrorResponseException.new(
|
|
628
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
629
|
+
' please send it to us as `application/json`.',
|
|
529
630
|
_response
|
|
530
631
|
)
|
|
531
632
|
elsif _response.status_code == 429
|
|
532
|
-
raise
|
|
633
|
+
raise ApiErrorResponseException.new(
|
|
533
634
|
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
534
635
|
' slow your request rate down and try again.',
|
|
535
636
|
_response
|
|
536
637
|
)
|
|
537
638
|
elsif _response.status_code == 500
|
|
538
|
-
raise
|
|
639
|
+
raise ApiErrorResponseException.new(
|
|
539
640
|
'Something unexpected happened. Please try again.',
|
|
540
641
|
_response
|
|
541
642
|
)
|
|
@@ -546,11 +647,415 @@ module Voice
|
|
|
546
647
|
ApiResponse.new(_response, data: _response.raw_body)
|
|
547
648
|
end
|
|
548
649
|
|
|
549
|
-
#
|
|
550
|
-
# recordings associated with the specified account
|
|
650
|
+
# Deletes the specified recording's media
|
|
551
651
|
# @param [String] account_id Required parameter: Example:
|
|
652
|
+
# @param [String] call_id Required parameter: Example:
|
|
653
|
+
# @param [String] recording_id Required parameter: Example:
|
|
654
|
+
# @return [void] response from the API call
|
|
655
|
+
def delete_recording_media(account_id,
|
|
656
|
+
call_id,
|
|
657
|
+
recording_id)
|
|
658
|
+
# Prepare query url.
|
|
659
|
+
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
|
660
|
+
_query_builder << '/api/v2/accounts/{accountId}/calls/{callId}/recordings/{recordingId}/media'
|
|
661
|
+
_query_builder = APIHelper.append_url_with_template_parameters(
|
|
662
|
+
_query_builder,
|
|
663
|
+
'accountId' => account_id,
|
|
664
|
+
'callId' => call_id,
|
|
665
|
+
'recordingId' => recording_id
|
|
666
|
+
)
|
|
667
|
+
_query_url = APIHelper.clean_url _query_builder
|
|
668
|
+
|
|
669
|
+
# Prepare and execute HttpRequest.
|
|
670
|
+
_request = config.http_client.delete(
|
|
671
|
+
_query_url
|
|
672
|
+
)
|
|
673
|
+
VoiceBasicAuth.apply(config, _request)
|
|
674
|
+
_response = execute_request(_request)
|
|
675
|
+
|
|
676
|
+
# Validate response against endpoint and global error codes.
|
|
677
|
+
if _response.status_code == 400
|
|
678
|
+
raise ApiErrorResponseException.new(
|
|
679
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
680
|
+
' fix it before trying again.',
|
|
681
|
+
_response
|
|
682
|
+
)
|
|
683
|
+
elsif _response.status_code == 401
|
|
684
|
+
raise APIException.new(
|
|
685
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
686
|
+
' credentials to authenticate to the API.',
|
|
687
|
+
_response
|
|
688
|
+
)
|
|
689
|
+
elsif _response.status_code == 403
|
|
690
|
+
raise ApiErrorResponseException.new(
|
|
691
|
+
'User unauthorized to perform this action.',
|
|
692
|
+
_response
|
|
693
|
+
)
|
|
694
|
+
elsif _response.status_code == 404
|
|
695
|
+
raise ApiErrorResponseException.new(
|
|
696
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
697
|
+
_response
|
|
698
|
+
)
|
|
699
|
+
elsif _response.status_code == 415
|
|
700
|
+
raise ApiErrorResponseException.new(
|
|
701
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
702
|
+
' please send it to us as `application/json`.',
|
|
703
|
+
_response
|
|
704
|
+
)
|
|
705
|
+
elsif _response.status_code == 429
|
|
706
|
+
raise ApiErrorResponseException.new(
|
|
707
|
+
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
708
|
+
' slow your request rate down and try again.',
|
|
709
|
+
_response
|
|
710
|
+
)
|
|
711
|
+
elsif _response.status_code == 500
|
|
712
|
+
raise ApiErrorResponseException.new(
|
|
713
|
+
'Something unexpected happened. Please try again.',
|
|
714
|
+
_response
|
|
715
|
+
)
|
|
716
|
+
end
|
|
717
|
+
validate_response(_response)
|
|
718
|
+
|
|
719
|
+
# Return appropriate response type.
|
|
720
|
+
ApiResponse.new(_response)
|
|
721
|
+
end
|
|
722
|
+
|
|
723
|
+
# Downloads the specified transcription
|
|
724
|
+
# @param [String] account_id Required parameter: Example:
|
|
725
|
+
# @param [String] call_id Required parameter: Example:
|
|
726
|
+
# @param [String] recording_id Required parameter: Example:
|
|
727
|
+
# @return [TranscriptionResponse] response from the API call
|
|
728
|
+
def get_recording_transcription(account_id,
|
|
729
|
+
call_id,
|
|
730
|
+
recording_id)
|
|
731
|
+
# Prepare query url.
|
|
732
|
+
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
|
733
|
+
_query_builder << '/api/v2/accounts/{accountId}/calls/{callId}/recordings/{recordingId}/transcription'
|
|
734
|
+
_query_builder = APIHelper.append_url_with_template_parameters(
|
|
735
|
+
_query_builder,
|
|
736
|
+
'accountId' => account_id,
|
|
737
|
+
'callId' => call_id,
|
|
738
|
+
'recordingId' => recording_id
|
|
739
|
+
)
|
|
740
|
+
_query_url = APIHelper.clean_url _query_builder
|
|
741
|
+
|
|
742
|
+
# Prepare headers.
|
|
743
|
+
_headers = {
|
|
744
|
+
'accept' => 'application/json'
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
# Prepare and execute HttpRequest.
|
|
748
|
+
_request = config.http_client.get(
|
|
749
|
+
_query_url,
|
|
750
|
+
headers: _headers
|
|
751
|
+
)
|
|
752
|
+
VoiceBasicAuth.apply(config, _request)
|
|
753
|
+
_response = execute_request(_request)
|
|
754
|
+
|
|
755
|
+
# Validate response against endpoint and global error codes.
|
|
756
|
+
if _response.status_code == 400
|
|
757
|
+
raise ApiErrorResponseException.new(
|
|
758
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
759
|
+
' fix it before trying again.',
|
|
760
|
+
_response
|
|
761
|
+
)
|
|
762
|
+
elsif _response.status_code == 401
|
|
763
|
+
raise APIException.new(
|
|
764
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
765
|
+
' credentials to authenticate to the API.',
|
|
766
|
+
_response
|
|
767
|
+
)
|
|
768
|
+
elsif _response.status_code == 403
|
|
769
|
+
raise ApiErrorResponseException.new(
|
|
770
|
+
'User unauthorized to perform this action.',
|
|
771
|
+
_response
|
|
772
|
+
)
|
|
773
|
+
elsif _response.status_code == 404
|
|
774
|
+
raise ApiErrorResponseException.new(
|
|
775
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
776
|
+
_response
|
|
777
|
+
)
|
|
778
|
+
elsif _response.status_code == 415
|
|
779
|
+
raise ApiErrorResponseException.new(
|
|
780
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
781
|
+
' please send it to us as `application/json`.',
|
|
782
|
+
_response
|
|
783
|
+
)
|
|
784
|
+
elsif _response.status_code == 429
|
|
785
|
+
raise ApiErrorResponseException.new(
|
|
786
|
+
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
787
|
+
' slow your request rate down and try again.',
|
|
788
|
+
_response
|
|
789
|
+
)
|
|
790
|
+
elsif _response.status_code == 500
|
|
791
|
+
raise ApiErrorResponseException.new(
|
|
792
|
+
'Something unexpected happened. Please try again.',
|
|
793
|
+
_response
|
|
794
|
+
)
|
|
795
|
+
end
|
|
796
|
+
validate_response(_response)
|
|
797
|
+
|
|
798
|
+
# Return appropriate response type.
|
|
799
|
+
decoded = APIHelper.json_deserialize(_response.raw_body)
|
|
800
|
+
ApiResponse.new(_response, data: TranscriptionResponse.from_hash(decoded))
|
|
801
|
+
end
|
|
802
|
+
|
|
803
|
+
# Requests that the specified recording be transcribed
|
|
804
|
+
# @param [String] account_id Required parameter: Example:
|
|
805
|
+
# @param [String] call_id Required parameter: Example:
|
|
806
|
+
# @param [String] recording_id Required parameter: Example:
|
|
807
|
+
# @param [ApiTranscribeRecordingRequest] body Optional parameter: Example:
|
|
808
|
+
# @return [void] response from the API call
|
|
809
|
+
def create_transcribe_recording(account_id,
|
|
810
|
+
call_id,
|
|
811
|
+
recording_id,
|
|
812
|
+
body: nil)
|
|
813
|
+
# Prepare query url.
|
|
814
|
+
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
|
815
|
+
_query_builder << '/api/v2/accounts/{accountId}/calls/{callId}/recordings/{recordingId}/transcription'
|
|
816
|
+
_query_builder = APIHelper.append_url_with_template_parameters(
|
|
817
|
+
_query_builder,
|
|
818
|
+
'accountId' => account_id,
|
|
819
|
+
'callId' => call_id,
|
|
820
|
+
'recordingId' => recording_id
|
|
821
|
+
)
|
|
822
|
+
_query_url = APIHelper.clean_url _query_builder
|
|
823
|
+
|
|
824
|
+
# Prepare headers.
|
|
825
|
+
_headers = {
|
|
826
|
+
'content-type' => 'application/json; charset=utf-8'
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
# Prepare and execute HttpRequest.
|
|
830
|
+
_request = config.http_client.post(
|
|
831
|
+
_query_url,
|
|
832
|
+
headers: _headers,
|
|
833
|
+
parameters: body.to_json
|
|
834
|
+
)
|
|
835
|
+
VoiceBasicAuth.apply(config, _request)
|
|
836
|
+
_response = execute_request(_request)
|
|
837
|
+
|
|
838
|
+
# Validate response against endpoint and global error codes.
|
|
839
|
+
if _response.status_code == 400
|
|
840
|
+
raise ApiErrorResponseException.new(
|
|
841
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
842
|
+
' fix it before trying again.',
|
|
843
|
+
_response
|
|
844
|
+
)
|
|
845
|
+
elsif _response.status_code == 401
|
|
846
|
+
raise APIException.new(
|
|
847
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
848
|
+
' credentials to authenticate to the API.',
|
|
849
|
+
_response
|
|
850
|
+
)
|
|
851
|
+
elsif _response.status_code == 403
|
|
852
|
+
raise ApiErrorResponseException.new(
|
|
853
|
+
'User unauthorized to perform this action.',
|
|
854
|
+
_response
|
|
855
|
+
)
|
|
856
|
+
elsif _response.status_code == 404
|
|
857
|
+
raise ApiErrorResponseException.new(
|
|
858
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
859
|
+
_response
|
|
860
|
+
)
|
|
861
|
+
elsif _response.status_code == 410
|
|
862
|
+
raise ApiErrorResponseException.new(
|
|
863
|
+
'The media for this recording has been deleted, so we can\'t' \
|
|
864
|
+
' transcribe it',
|
|
865
|
+
_response
|
|
866
|
+
)
|
|
867
|
+
elsif _response.status_code == 415
|
|
868
|
+
raise ApiErrorResponseException.new(
|
|
869
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
870
|
+
' please send it to us as `application/json`.',
|
|
871
|
+
_response
|
|
872
|
+
)
|
|
873
|
+
elsif _response.status_code == 429
|
|
874
|
+
raise ApiErrorResponseException.new(
|
|
875
|
+
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
876
|
+
' slow your request rate down and try again.',
|
|
877
|
+
_response
|
|
878
|
+
)
|
|
879
|
+
elsif _response.status_code == 500
|
|
880
|
+
raise ApiErrorResponseException.new(
|
|
881
|
+
'Something unexpected happened. Please try again.',
|
|
882
|
+
_response
|
|
883
|
+
)
|
|
884
|
+
end
|
|
885
|
+
validate_response(_response)
|
|
886
|
+
|
|
887
|
+
# Return appropriate response type.
|
|
888
|
+
ApiResponse.new(_response)
|
|
889
|
+
end
|
|
890
|
+
|
|
891
|
+
# Deletes the specified recording's transcription
|
|
892
|
+
# @param [String] account_id Required parameter: Example:
|
|
893
|
+
# @param [String] call_id Required parameter: Example:
|
|
894
|
+
# @param [String] recording_id Required parameter: Example:
|
|
895
|
+
# @return [void] response from the API call
|
|
896
|
+
def delete_recording_transcription(account_id,
|
|
897
|
+
call_id,
|
|
898
|
+
recording_id)
|
|
899
|
+
# Prepare query url.
|
|
900
|
+
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
|
901
|
+
_query_builder << '/api/v2/accounts/{accountId}/calls/{callId}/recordings/{recordingId}/transcription'
|
|
902
|
+
_query_builder = APIHelper.append_url_with_template_parameters(
|
|
903
|
+
_query_builder,
|
|
904
|
+
'accountId' => account_id,
|
|
905
|
+
'callId' => call_id,
|
|
906
|
+
'recordingId' => recording_id
|
|
907
|
+
)
|
|
908
|
+
_query_url = APIHelper.clean_url _query_builder
|
|
909
|
+
|
|
910
|
+
# Prepare and execute HttpRequest.
|
|
911
|
+
_request = config.http_client.delete(
|
|
912
|
+
_query_url
|
|
913
|
+
)
|
|
914
|
+
VoiceBasicAuth.apply(config, _request)
|
|
915
|
+
_response = execute_request(_request)
|
|
916
|
+
|
|
917
|
+
# Validate response against endpoint and global error codes.
|
|
918
|
+
if _response.status_code == 400
|
|
919
|
+
raise ApiErrorResponseException.new(
|
|
920
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
921
|
+
' fix it before trying again.',
|
|
922
|
+
_response
|
|
923
|
+
)
|
|
924
|
+
elsif _response.status_code == 401
|
|
925
|
+
raise APIException.new(
|
|
926
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
927
|
+
' credentials to authenticate to the API.',
|
|
928
|
+
_response
|
|
929
|
+
)
|
|
930
|
+
elsif _response.status_code == 403
|
|
931
|
+
raise ApiErrorResponseException.new(
|
|
932
|
+
'User unauthorized to perform this action.',
|
|
933
|
+
_response
|
|
934
|
+
)
|
|
935
|
+
elsif _response.status_code == 404
|
|
936
|
+
raise ApiErrorResponseException.new(
|
|
937
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
938
|
+
_response
|
|
939
|
+
)
|
|
940
|
+
elsif _response.status_code == 415
|
|
941
|
+
raise ApiErrorResponseException.new(
|
|
942
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
943
|
+
' please send it to us as `application/json`.',
|
|
944
|
+
_response
|
|
945
|
+
)
|
|
946
|
+
elsif _response.status_code == 429
|
|
947
|
+
raise ApiErrorResponseException.new(
|
|
948
|
+
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
949
|
+
' slow your request rate down and try again.',
|
|
950
|
+
_response
|
|
951
|
+
)
|
|
952
|
+
elsif _response.status_code == 500
|
|
953
|
+
raise ApiErrorResponseException.new(
|
|
954
|
+
'Something unexpected happened. Please try again.',
|
|
955
|
+
_response
|
|
956
|
+
)
|
|
957
|
+
end
|
|
958
|
+
validate_response(_response)
|
|
959
|
+
|
|
960
|
+
# Return appropriate response type.
|
|
961
|
+
ApiResponse.new(_response)
|
|
962
|
+
end
|
|
963
|
+
|
|
964
|
+
# Modify the conference state
|
|
965
|
+
# @param [String] account_id Required parameter: Example:
|
|
966
|
+
# @param [String] conference_id Required parameter: Example:
|
|
967
|
+
# @param [CallEngineModifyConferenceRequest] body Optional parameter:
|
|
968
|
+
# Example:
|
|
969
|
+
# @return [void] response from the API call
|
|
970
|
+
def modify_conference(account_id,
|
|
971
|
+
conference_id,
|
|
972
|
+
body: nil)
|
|
973
|
+
# Prepare query url.
|
|
974
|
+
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
|
975
|
+
_query_builder << '/api/v2/accounts/{accountId}/conferences/{conferenceId}'
|
|
976
|
+
_query_builder = APIHelper.append_url_with_template_parameters(
|
|
977
|
+
_query_builder,
|
|
978
|
+
'accountId' => account_id,
|
|
979
|
+
'conferenceId' => conference_id
|
|
980
|
+
)
|
|
981
|
+
_query_url = APIHelper.clean_url _query_builder
|
|
982
|
+
|
|
983
|
+
# Prepare headers.
|
|
984
|
+
_headers = {
|
|
985
|
+
'content-type' => 'application/json; charset=utf-8'
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
# Prepare and execute HttpRequest.
|
|
989
|
+
_request = config.http_client.post(
|
|
990
|
+
_query_url,
|
|
991
|
+
headers: _headers,
|
|
992
|
+
parameters: body.to_json
|
|
993
|
+
)
|
|
994
|
+
VoiceBasicAuth.apply(config, _request)
|
|
995
|
+
_response = execute_request(_request)
|
|
996
|
+
|
|
997
|
+
# Validate response against endpoint and global error codes.
|
|
998
|
+
if _response.status_code == 400
|
|
999
|
+
raise ApiErrorResponseException.new(
|
|
1000
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
1001
|
+
' fix it before trying again.',
|
|
1002
|
+
_response
|
|
1003
|
+
)
|
|
1004
|
+
elsif _response.status_code == 401
|
|
1005
|
+
raise APIException.new(
|
|
1006
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
1007
|
+
' credentials to authenticate to the API.',
|
|
1008
|
+
_response
|
|
1009
|
+
)
|
|
1010
|
+
elsif _response.status_code == 403
|
|
1011
|
+
raise ApiErrorResponseException.new(
|
|
1012
|
+
'User unauthorized to perform this action.',
|
|
1013
|
+
_response
|
|
1014
|
+
)
|
|
1015
|
+
elsif _response.status_code == 404
|
|
1016
|
+
raise ApiErrorResponseException.new(
|
|
1017
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
1018
|
+
_response
|
|
1019
|
+
)
|
|
1020
|
+
elsif _response.status_code == 415
|
|
1021
|
+
raise ApiErrorResponseException.new(
|
|
1022
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
1023
|
+
' please send it to us as `application/json`.',
|
|
1024
|
+
_response
|
|
1025
|
+
)
|
|
1026
|
+
elsif _response.status_code == 429
|
|
1027
|
+
raise ApiErrorResponseException.new(
|
|
1028
|
+
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
1029
|
+
' slow your request rate down and try again.',
|
|
1030
|
+
_response
|
|
1031
|
+
)
|
|
1032
|
+
elsif _response.status_code == 500
|
|
1033
|
+
raise ApiErrorResponseException.new(
|
|
1034
|
+
'Something unexpected happened. Please try again.',
|
|
1035
|
+
_response
|
|
1036
|
+
)
|
|
1037
|
+
end
|
|
1038
|
+
validate_response(_response)
|
|
1039
|
+
|
|
1040
|
+
# Return appropriate response type.
|
|
1041
|
+
ApiResponse.new(_response)
|
|
1042
|
+
end
|
|
1043
|
+
|
|
1044
|
+
# Returns a list of metadata for the recordings associated with the
|
|
1045
|
+
# specified account. The list can be filtered by the optional from, to,
|
|
1046
|
+
# minStartTime, and maxStartTime arguments. The list is capped at 1000
|
|
1047
|
+
# entries and may be empty if no recordings match the specified criteria.
|
|
1048
|
+
# @param [String] account_id Required parameter: Example:
|
|
1049
|
+
# @param [String] from Optional parameter: Example:
|
|
1050
|
+
# @param [String] to Optional parameter: Example:
|
|
1051
|
+
# @param [String] min_start_time Optional parameter: Example:
|
|
1052
|
+
# @param [String] max_start_time Optional parameter: Example:
|
|
552
1053
|
# @return [List of RecordingMetadataResponse] response from the API call
|
|
553
|
-
def get_query_metadata_for_account(account_id
|
|
1054
|
+
def get_query_metadata_for_account(account_id,
|
|
1055
|
+
from: nil,
|
|
1056
|
+
to: nil,
|
|
1057
|
+
min_start_time: nil,
|
|
1058
|
+
max_start_time: nil)
|
|
554
1059
|
# Prepare query url.
|
|
555
1060
|
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
|
556
1061
|
_query_builder << '/api/v2/accounts/{accountId}/recordings'
|
|
@@ -558,6 +1063,13 @@ module Voice
|
|
|
558
1063
|
_query_builder,
|
|
559
1064
|
'accountId' => account_id
|
|
560
1065
|
)
|
|
1066
|
+
_query_builder = APIHelper.append_url_with_query_parameters(
|
|
1067
|
+
_query_builder,
|
|
1068
|
+
'from' => from,
|
|
1069
|
+
'to' => to,
|
|
1070
|
+
'minStartTime' => min_start_time,
|
|
1071
|
+
'maxStartTime' => max_start_time
|
|
1072
|
+
)
|
|
561
1073
|
_query_url = APIHelper.clean_url _query_builder
|
|
562
1074
|
|
|
563
1075
|
# Prepare headers.
|
|
@@ -575,36 +1087,41 @@ module Voice
|
|
|
575
1087
|
|
|
576
1088
|
# Validate response against endpoint and global error codes.
|
|
577
1089
|
if _response.status_code == 400
|
|
578
|
-
raise
|
|
579
|
-
'Something
|
|
580
|
-
' before trying again.',
|
|
1090
|
+
raise ApiErrorResponseException.new(
|
|
1091
|
+
'Something\'s not quite right... Your request is invalid. Please' \
|
|
1092
|
+
' fix it before trying again.',
|
|
581
1093
|
_response
|
|
582
1094
|
)
|
|
583
1095
|
elsif _response.status_code == 401
|
|
584
1096
|
raise APIException.new(
|
|
585
|
-
'Please
|
|
1097
|
+
'Your credentials are invalid. Please use your Bandwidth dashboard' \
|
|
1098
|
+
' credentials to authenticate to the API.',
|
|
586
1099
|
_response
|
|
587
1100
|
)
|
|
588
1101
|
elsif _response.status_code == 403
|
|
589
|
-
raise
|
|
590
|
-
'
|
|
591
|
-
|
|
1102
|
+
raise ApiErrorResponseException.new(
|
|
1103
|
+
'User unauthorized to perform this action.',
|
|
1104
|
+
_response
|
|
1105
|
+
)
|
|
1106
|
+
elsif _response.status_code == 404
|
|
1107
|
+
raise ApiErrorResponseException.new(
|
|
1108
|
+
'The resource specified cannot be found or does not belong to you.',
|
|
592
1109
|
_response
|
|
593
1110
|
)
|
|
594
1111
|
elsif _response.status_code == 415
|
|
595
|
-
raise
|
|
596
|
-
'We don\'t support that media type.
|
|
597
|
-
' `application/json`.',
|
|
1112
|
+
raise ApiErrorResponseException.new(
|
|
1113
|
+
'We don\'t support that media type. If a request body is required,' \
|
|
1114
|
+
' please send it to us as `application/json`.',
|
|
598
1115
|
_response
|
|
599
1116
|
)
|
|
600
1117
|
elsif _response.status_code == 429
|
|
601
|
-
raise
|
|
1118
|
+
raise ApiErrorResponseException.new(
|
|
602
1119
|
'You\'re sending requests to this endpoint too frequently. Please' \
|
|
603
1120
|
' slow your request rate down and try again.',
|
|
604
1121
|
_response
|
|
605
1122
|
)
|
|
606
1123
|
elsif _response.status_code == 500
|
|
607
|
-
raise
|
|
1124
|
+
raise ApiErrorResponseException.new(
|
|
608
1125
|
'Something unexpected happened. Please try again.',
|
|
609
1126
|
_response
|
|
610
1127
|
)
|