bandwidth-sdk 0.1.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 +7 -0
- data/LICENSE +28 -0
- data/README.md +1 -0
- data/lib/bandwidth.rb +37 -0
- data/lib/bandwidth/api_helper.rb +280 -0
- data/lib/bandwidth/client.rb +32 -0
- data/lib/bandwidth/configuration.rb +111 -0
- data/lib/bandwidth/exceptions/api_exception.rb +20 -0
- data/lib/bandwidth/http/api_response.rb +36 -0
- data/lib/bandwidth/http/auth/voice_basic_auth.rb +22 -0
- data/lib/bandwidth/http/faraday_client.rb +64 -0
- data/lib/bandwidth/http/http_call_back.rb +24 -0
- data/lib/bandwidth/http/http_client.rb +104 -0
- data/lib/bandwidth/http/http_method_enum.rb +13 -0
- data/lib/bandwidth/http/http_request.rb +50 -0
- data/lib/bandwidth/http/http_response.rb +29 -0
- data/lib/bandwidth/models/base_model.rb +36 -0
- data/lib/bandwidth/voice_lib/voice.rb +23 -0
- data/lib/bandwidth/voice_lib/voice/bxml/bxml.rb +36 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/forward.rb +19 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/gather.rb +37 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/hangup.rb +14 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/pause.rb +15 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/phone_number.rb +18 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/play_audio.rb +17 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/redirect.rb +20 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/send_dtmf.rb +12 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/speak_sentence.rb +18 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/transfer.rb +37 -0
- data/lib/bandwidth/voice_lib/voice/bxml/verbs/xml_verb.rb +26 -0
- data/lib/bandwidth/voice_lib/voice/client.rb +36 -0
- data/lib/bandwidth/voice_lib/voice/controllers/base_controller.rb +49 -0
- data/lib/bandwidth/voice_lib/voice/controllers/calls_controller.rb +88 -0
- data/lib/bandwidth/voice_lib/voice/models/answer_method_enum.rb +35 -0
- data/lib/bandwidth/voice_lib/voice/models/api_call_response.rb +116 -0
- data/lib/bandwidth/voice_lib/voice/models/api_create_call_request.rb +125 -0
- data/lib/bandwidth/voice_lib/voice/models/api_modify_call_request.rb +80 -0
- data/lib/bandwidth/voice_lib/voice/models/bandwidth_callback_message_voice.rb +98 -0
- data/lib/bandwidth/voice_lib/voice/models/disconnect_method_enum.rb +35 -0
- data/lib/bandwidth/voice_lib/voice/models/redirect_method_enum.rb +35 -0
- data/lib/bandwidth/voice_lib/voice/models/state_enum.rb +17 -0
- metadata +181 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative 'xml_verb'
|
2
|
+
|
3
|
+
module Bandwidth
|
4
|
+
module Voice
|
5
|
+
class Forward
|
6
|
+
include XmlVerb
|
7
|
+
|
8
|
+
def to_xml(xml)
|
9
|
+
xml.Forward(compact_hash({
|
10
|
+
'to' => to,
|
11
|
+
'from' => from,
|
12
|
+
'callTimeout' => call_timeout,
|
13
|
+
'diversionTreatment' => diversion_treatment,
|
14
|
+
'diversionReason' => diversion_reason
|
15
|
+
}))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'xml_verb'
|
2
|
+
|
3
|
+
module Bandwidth
|
4
|
+
module Voice
|
5
|
+
# The Gather verb is used to collect digits for some period of time
|
6
|
+
class Gather
|
7
|
+
include XmlVerb
|
8
|
+
|
9
|
+
def to_xml(xml)
|
10
|
+
xml.Gather(compact_hash({
|
11
|
+
'gatherUrl' => gather_url,
|
12
|
+
'gatherMethod' => gather_method,
|
13
|
+
'terminatingDigits' => terminating_digits,
|
14
|
+
'tag' => tag,
|
15
|
+
'maxDigits' => max_digits,
|
16
|
+
'interDigitTimeout' => inter_digit_timeout,
|
17
|
+
'username' => username,
|
18
|
+
'password' => password,
|
19
|
+
'firstDigitTimeout' => first_digit_timeout,
|
20
|
+
'repeatCount' => repeat_count
|
21
|
+
})) do
|
22
|
+
def embedded_xml(xml, property, type)
|
23
|
+
if property
|
24
|
+
s = if property.is_a?(type)
|
25
|
+
then property
|
26
|
+
else type.new(property)
|
27
|
+
end
|
28
|
+
s.to_xml(xml)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
embedded_xml(xml, speak_sentence, SpeakSentence)
|
32
|
+
embedded_xml(xml, play_audio, PlayAudio)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'xml_verb'
|
2
|
+
|
3
|
+
module Bandwidth
|
4
|
+
module Voice
|
5
|
+
class PhoneNumber
|
6
|
+
include XmlVerb
|
7
|
+
def to_xml(xml)
|
8
|
+
xml.PhoneNumber(number, compact_hash({
|
9
|
+
'transferAnswerUrl' => transfer_answer_url,
|
10
|
+
'transferAnswerMethod' => transfer_answer_method,
|
11
|
+
'username' => username,
|
12
|
+
'password' => password,
|
13
|
+
'tag' => tag
|
14
|
+
}))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'xml_verb'
|
2
|
+
|
3
|
+
module Bandwidth
|
4
|
+
module Voice
|
5
|
+
# The PlayAudio verb is used to play an audio file in the call
|
6
|
+
class PlayAudio
|
7
|
+
include XmlVerb
|
8
|
+
|
9
|
+
def to_xml(xml)
|
10
|
+
xml.PlayAudio(url, compact_hash({
|
11
|
+
'username' => username,
|
12
|
+
'password' => password
|
13
|
+
}))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative 'xml_verb'
|
2
|
+
|
3
|
+
module Bandwidth
|
4
|
+
module Voice
|
5
|
+
# The Redirect verb is used to redirect the current XML execution to another URL
|
6
|
+
class Redirect
|
7
|
+
include XmlVerb
|
8
|
+
|
9
|
+
def to_xml(xml)
|
10
|
+
xml.Redirect(compact_hash({
|
11
|
+
'redirectUrl' => redirect_url,
|
12
|
+
'redirectMethod' => redirect_method,
|
13
|
+
'tag' => tag,
|
14
|
+
'username' => username,
|
15
|
+
'password' => password
|
16
|
+
}))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'xml_verb'
|
2
|
+
|
3
|
+
module Bandwidth
|
4
|
+
module Voice
|
5
|
+
# The SpeakSentence verb is used to convert any text into speak for the caller
|
6
|
+
class SpeakSentence
|
7
|
+
include XmlVerb
|
8
|
+
|
9
|
+
def to_xml(xml)
|
10
|
+
xml.SpeakSentence(sentence, compact_hash({
|
11
|
+
'voice' => voice,
|
12
|
+
'locale' => locale,
|
13
|
+
'gender' => gender
|
14
|
+
}))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'xml_verb'
|
2
|
+
|
3
|
+
module Bandwidth
|
4
|
+
module Voice
|
5
|
+
# The Transfer verb is used to transfer the call to another number
|
6
|
+
class Transfer
|
7
|
+
include XmlVerb
|
8
|
+
|
9
|
+
def to_xml(xml)
|
10
|
+
xml.Transfer(compact_hash({
|
11
|
+
'transferCallerId' => transfer_caller_id,
|
12
|
+
'callTimeout' => call_timeout,
|
13
|
+
'tag' => tag,
|
14
|
+
'transferCompleteUrl' => transfer_complete_url,
|
15
|
+
'transferCompleteMethod' => transfer_complete_method,
|
16
|
+
'username' => username,
|
17
|
+
'password' => password,
|
18
|
+
'diversionTreatment' => diversion_treatment,
|
19
|
+
'diversionReason' => diversion_reason
|
20
|
+
})) do
|
21
|
+
def embedded_xml(xml, property, type)
|
22
|
+
if property
|
23
|
+
s = if property.is_a?(type)
|
24
|
+
then property
|
25
|
+
else type.new(property)
|
26
|
+
end
|
27
|
+
s.to_xml(xml)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
phone_numbers.each do |number|
|
31
|
+
embedded_xml(xml, number, PhoneNumber)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Bandwidth
|
2
|
+
module Voice
|
3
|
+
module XmlVerb
|
4
|
+
def initialize(data = nil)
|
5
|
+
@data = (data || {}).clone()
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_missing(name, *args, &block)
|
9
|
+
if name[name.size - 1] == '='
|
10
|
+
@data[name[0..-2].to_sym] = args[0]
|
11
|
+
else
|
12
|
+
@data[name]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def compact_hash(hash)
|
17
|
+
hash.inject({}) do |new_hash, (k,v)|
|
18
|
+
if !v.nil?
|
19
|
+
new_hash[k] = v.class == Hash ? compact_hash(v) : v
|
20
|
+
end
|
21
|
+
new_hash
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# bandwidth
|
2
|
+
#
|
3
|
+
# This file was automatically generated by APIMATIC v2.0
|
4
|
+
# ( https://apimatic.io ).
|
5
|
+
|
6
|
+
module Bandwidth
|
7
|
+
module Voice
|
8
|
+
# bandwidth client class.
|
9
|
+
class Client
|
10
|
+
attr_reader :config
|
11
|
+
|
12
|
+
# Access to calls controller.
|
13
|
+
# @return [CallsController] Returns the controller instance.
|
14
|
+
def calls
|
15
|
+
@calls ||= CallsController.new config
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(timeout: 60, max_retries: 0, retry_interval: 1,
|
19
|
+
backoff_factor: 1, environment: Environment::PRODUCTION,
|
20
|
+
voice_basic_auth_user_name: 'TODO: Replace',
|
21
|
+
voice_basic_auth_password: 'TODO: Replace', config: nil)
|
22
|
+
@config = if config.nil?
|
23
|
+
Configuration.new(timeout: timeout,
|
24
|
+
max_retries: max_retries,
|
25
|
+
retry_interval: retry_interval,
|
26
|
+
backoff_factor: backoff_factor,
|
27
|
+
environment: environment,
|
28
|
+
voice_basic_auth_user_name: voice_basic_auth_user_name,
|
29
|
+
voice_basic_auth_password: voice_basic_auth_password)
|
30
|
+
else
|
31
|
+
config
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# bandwidth
|
2
|
+
#
|
3
|
+
# This file was automatically generated by APIMATIC v2.0
|
4
|
+
# ( https://apimatic.io ).
|
5
|
+
|
6
|
+
module Bandwidth
|
7
|
+
# BaseController.
|
8
|
+
class BaseController
|
9
|
+
attr_accessor :config, :http_call_back
|
10
|
+
|
11
|
+
def initialize(config, http_call_back: nil)
|
12
|
+
@config = config
|
13
|
+
@http_call_back = http_call_back
|
14
|
+
|
15
|
+
@global_headers = {
|
16
|
+
'user-agent' => 'APIMATIC 2.0'
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def validate_parameters(args)
|
21
|
+
args.each do |_name, value|
|
22
|
+
if value.nil?
|
23
|
+
raise ArgumentError, "Required parameter #{_name} cannot be nil."
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def execute_request(request, binary: false)
|
29
|
+
@http_call_back.on_before_request(request) if @http_call_back
|
30
|
+
|
31
|
+
APIHelper.clean_hash(request.headers)
|
32
|
+
request.headers = @global_headers.clone.merge(request.headers)
|
33
|
+
|
34
|
+
response = if binary
|
35
|
+
config.http_client.execute_as_binary(request)
|
36
|
+
else
|
37
|
+
config.http_client.execute_as_string(request)
|
38
|
+
end
|
39
|
+
@http_call_back.on_after_response(response) if @http_call_back
|
40
|
+
|
41
|
+
response
|
42
|
+
end
|
43
|
+
|
44
|
+
def validate_response(response)
|
45
|
+
raise APIException.new 'HTTP Response Not OK', response unless
|
46
|
+
response.status_code.between?(200, 208) # [200,208] = HTTP OK
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# bandwidth
|
2
|
+
#
|
3
|
+
# This file was automatically generated by APIMATIC v2.0
|
4
|
+
# ( https://apimatic.io ).
|
5
|
+
|
6
|
+
module Bandwidth
|
7
|
+
module Voice
|
8
|
+
# CallsController
|
9
|
+
class CallsController < BaseController
|
10
|
+
def initialize(config, http_call_back: nil)
|
11
|
+
super(config, http_call_back: http_call_back)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Creates a call request
|
15
|
+
# @param [String] account_id Required parameter: Example:
|
16
|
+
# @param [ApiCreateCallRequest] body Optional parameter: Example:
|
17
|
+
# @return [ApiCallResponse] response from the API call
|
18
|
+
def create_call(account_id,
|
19
|
+
body: nil)
|
20
|
+
# Prepare query url.
|
21
|
+
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
22
|
+
_query_builder << '/api/v2/accounts/{accountId}/calls'
|
23
|
+
_query_builder = APIHelper.append_url_with_template_parameters(
|
24
|
+
_query_builder,
|
25
|
+
'accountId' => account_id
|
26
|
+
)
|
27
|
+
_query_url = APIHelper.clean_url _query_builder
|
28
|
+
|
29
|
+
# Prepare headers.
|
30
|
+
_headers = {
|
31
|
+
'accept' => 'application/json',
|
32
|
+
'content-type' => 'application/json; charset=utf-8'
|
33
|
+
}
|
34
|
+
|
35
|
+
# Prepare and execute HttpRequest.
|
36
|
+
_request = config.http_client.post(
|
37
|
+
_query_url,
|
38
|
+
headers: _headers,
|
39
|
+
parameters: body.to_json
|
40
|
+
)
|
41
|
+
VoiceBasicAuth.apply(config, _request)
|
42
|
+
_response = execute_request(_request)
|
43
|
+
validate_response(_response)
|
44
|
+
|
45
|
+
# Return appropriate response type.
|
46
|
+
decoded = APIHelper.json_deserialize(_response.raw_body)
|
47
|
+
ApiResponse.new(_response, data: ApiCallResponse.from_hash(decoded))
|
48
|
+
end
|
49
|
+
|
50
|
+
# Creates a call request
|
51
|
+
# @param [String] account_id Required parameter: Example:
|
52
|
+
# @param [String] call_id Required parameter: Example:
|
53
|
+
# @param [ApiModifyCallRequest] body Optional parameter: Example:
|
54
|
+
# @return [void] response from the API call
|
55
|
+
def modify_call(account_id,
|
56
|
+
call_id,
|
57
|
+
body: nil)
|
58
|
+
# Prepare query url.
|
59
|
+
_query_builder = config.get_base_uri(Server::VOICEDEFAULT)
|
60
|
+
_query_builder << '/api/v2/accounts/{accountId}/calls/{callId}'
|
61
|
+
_query_builder = APIHelper.append_url_with_template_parameters(
|
62
|
+
_query_builder,
|
63
|
+
'accountId' => account_id,
|
64
|
+
'callId' => call_id
|
65
|
+
)
|
66
|
+
_query_url = APIHelper.clean_url _query_builder
|
67
|
+
|
68
|
+
# Prepare headers.
|
69
|
+
_headers = {
|
70
|
+
'content-type' => 'application/json; charset=utf-8'
|
71
|
+
}
|
72
|
+
|
73
|
+
# Prepare and execute HttpRequest.
|
74
|
+
_request = config.http_client.post(
|
75
|
+
_query_url,
|
76
|
+
headers: _headers,
|
77
|
+
parameters: body.to_json
|
78
|
+
)
|
79
|
+
VoiceBasicAuth.apply(config, _request)
|
80
|
+
_response = execute_request(_request)
|
81
|
+
validate_response(_response)
|
82
|
+
|
83
|
+
# Return appropriate response type.
|
84
|
+
ApiResponse.new(_response)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# bandwidth
|
2
|
+
#
|
3
|
+
# This file was automatically generated by APIMATIC v2.0
|
4
|
+
# ( https://apimatic.io ).
|
5
|
+
|
6
|
+
module Bandwidth
|
7
|
+
# AnswerMethod.
|
8
|
+
class AnswerMethodEnum
|
9
|
+
ANSWER_METHOD_ENUM = [
|
10
|
+
# TODO: Write general description for GET
|
11
|
+
GET = 'GET'.freeze,
|
12
|
+
|
13
|
+
# TODO: Write general description for HEAD
|
14
|
+
HEAD = 'HEAD'.freeze,
|
15
|
+
|
16
|
+
# TODO: Write general description for POST
|
17
|
+
POST = 'POST'.freeze,
|
18
|
+
|
19
|
+
# TODO: Write general description for PUT
|
20
|
+
PUT = 'PUT'.freeze,
|
21
|
+
|
22
|
+
# TODO: Write general description for PATCH
|
23
|
+
PATCH = 'PATCH'.freeze,
|
24
|
+
|
25
|
+
# TODO: Write general description for DELETE
|
26
|
+
DELETE = 'DELETE'.freeze,
|
27
|
+
|
28
|
+
# TODO: Write general description for OPTIONS
|
29
|
+
OPTIONS = 'OPTIONS'.freeze,
|
30
|
+
|
31
|
+
# TODO: Write general description for TRACE
|
32
|
+
TRACE = 'TRACE'.freeze
|
33
|
+
].freeze
|
34
|
+
end
|
35
|
+
end
|