nexmo 6.3.0 → 7.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +28 -9
- data/lib/nexmo.rb +1 -1
- data/lib/nexmo/abstract_authentication.rb +0 -2
- data/lib/nexmo/account.rb +5 -1
- data/lib/nexmo/alerts.rb +5 -1
- data/lib/nexmo/applications.rb +24 -4
- data/lib/nexmo/client.rb +45 -24
- data/lib/nexmo/config.rb +43 -10
- data/lib/nexmo/conversations.rb +24 -1
- data/lib/nexmo/conversations/events.rb +1 -1
- data/lib/nexmo/conversations/legs.rb +1 -1
- data/lib/nexmo/conversations/members.rb +1 -1
- data/lib/nexmo/conversations/users.rb +1 -1
- data/lib/nexmo/conversions.rb +4 -1
- data/lib/nexmo/entity.rb +2 -2
- data/lib/nexmo/errors.rb +8 -1
- data/lib/nexmo/files.rb +7 -3
- data/lib/nexmo/gsm7.rb +0 -2
- data/lib/nexmo/http.rb +12 -4
- data/lib/nexmo/json.rb +4 -1
- data/lib/nexmo/jwt.rb +11 -12
- data/lib/nexmo/key_secret_params.rb +9 -3
- data/lib/nexmo/keys.rb +24 -3
- data/lib/nexmo/logger.rb +14 -5
- data/lib/nexmo/messages.rb +6 -1
- data/lib/nexmo/namespace.rb +2 -10
- data/lib/nexmo/number_insight.rb +21 -7
- data/lib/nexmo/numbers.rb +1 -1
- data/lib/nexmo/pricing.rb +1 -1
- data/lib/nexmo/pricing_types.rb +1 -1
- data/lib/nexmo/redact.rb +4 -1
- data/lib/nexmo/response.rb +1 -1
- data/lib/nexmo/secrets.rb +1 -1
- data/lib/nexmo/signature.rb +1 -1
- data/lib/nexmo/sms.rb +10 -8
- data/lib/nexmo/tfa.rb +1 -1
- data/lib/nexmo/verify.rb +93 -18
- data/lib/nexmo/version.rb +1 -1
- data/lib/nexmo/{calls.rb → voice.rb} +12 -12
- data/lib/nexmo/{calls → voice}/dtmf.rb +2 -2
- data/lib/nexmo/{calls → voice}/list_response.rb +1 -1
- data/lib/nexmo/{calls → voice}/stream.rb +2 -2
- data/lib/nexmo/{calls → voice}/talk.rb +2 -2
- data/nexmo.gemspec +2 -1
- metadata +25 -14
- data/lib/nexmo/number_insight/response.rb +0 -7
- data/lib/nexmo/sms/response.rb +0 -8
- data/lib/nexmo/verify/response.rb +0 -7
data/lib/nexmo/messages.rb
CHANGED
@@ -1,18 +1,23 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Nexmo
|
5
5
|
class Messages < Namespace
|
6
|
+
extend T::Sig
|
7
|
+
|
6
8
|
self.host = :rest_host
|
7
9
|
|
10
|
+
sig { params(id: String).returns(Nexmo::Response) }
|
8
11
|
def get(id)
|
9
12
|
request('/search/message', params: {id: id})
|
10
13
|
end
|
11
14
|
|
15
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
12
16
|
def search(params)
|
13
17
|
request('/search/messages', params: params)
|
14
18
|
end
|
15
19
|
|
20
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
16
21
|
def rejections(params)
|
17
22
|
request('/search/rejections', params: params)
|
18
23
|
end
|
data/lib/nexmo/namespace.rb
CHANGED
@@ -46,14 +46,6 @@ module Nexmo
|
|
46
46
|
@request_headers ||= {}
|
47
47
|
end
|
48
48
|
|
49
|
-
def self.response_class
|
50
|
-
@response_class ||= Response
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.response_class=(response_class)
|
54
|
-
@response_class = response_class
|
55
|
-
end
|
56
|
-
|
57
49
|
protected
|
58
50
|
|
59
51
|
Get = Net::HTTP::Get
|
@@ -61,7 +53,7 @@ module Nexmo
|
|
61
53
|
Post = Net::HTTP::Post
|
62
54
|
Delete = Net::HTTP::Delete
|
63
55
|
|
64
|
-
def request(path, params: nil, type: Get, response_class:
|
56
|
+
def request(path, params: nil, type: Get, response_class: Response, &block)
|
65
57
|
uri = URI('https://' + @host + path)
|
66
58
|
|
67
59
|
params ||= {}
|
@@ -97,7 +89,7 @@ module Nexmo
|
|
97
89
|
|
98
90
|
logger.debug(response.body) if response.body
|
99
91
|
|
100
|
-
parse(response, response_class
|
92
|
+
parse(response, response_class)
|
101
93
|
end
|
102
94
|
|
103
95
|
def parse(response, response_class)
|
data/lib/nexmo/number_insight.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: true
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Nexmo
|
5
5
|
class NumberInsight < Namespace
|
6
|
-
self.response_class = Response
|
7
|
-
|
8
6
|
# Provides basic number insight information about a number.
|
9
7
|
#
|
10
8
|
# @example
|
@@ -25,7 +23,11 @@ module Nexmo
|
|
25
23
|
# @see https://developer.nexmo.com/api/number-insight#getNumberInsightBasic
|
26
24
|
#
|
27
25
|
def basic(params)
|
28
|
-
request('/ni/basic/json', params: params)
|
26
|
+
response = request('/ni/basic/json', params: params)
|
27
|
+
|
28
|
+
raise Error, response[:status_message] unless response.status.zero?
|
29
|
+
|
30
|
+
response
|
29
31
|
end
|
30
32
|
|
31
33
|
# Provides standard number insight information about a number.
|
@@ -53,7 +55,11 @@ module Nexmo
|
|
53
55
|
# @see https://developer.nexmo.com/api/number-insight#getNumberInsightStandard
|
54
56
|
#
|
55
57
|
def standard(params)
|
56
|
-
request('/ni/standard/json', params: params)
|
58
|
+
response = request('/ni/standard/json', params: params)
|
59
|
+
|
60
|
+
raise Error, response[:status_message] unless response.status.zero?
|
61
|
+
|
62
|
+
response
|
57
63
|
end
|
58
64
|
|
59
65
|
# Provides advanced number insight information about a number synchronously.
|
@@ -85,7 +91,11 @@ module Nexmo
|
|
85
91
|
# @see https://developer.nexmo.com/api/number-insight#getNumberInsightAdvanced
|
86
92
|
#
|
87
93
|
def advanced(params)
|
88
|
-
request('/ni/advanced/json', params: params)
|
94
|
+
response = request('/ni/advanced/json', params: params)
|
95
|
+
|
96
|
+
raise Error, response[:status_message] unless response.status.zero?
|
97
|
+
|
98
|
+
response
|
89
99
|
end
|
90
100
|
|
91
101
|
# Provides advanced number insight number information *asynchronously* using the URL specified in the callback parameter.
|
@@ -120,7 +130,11 @@ module Nexmo
|
|
120
130
|
# @see https://developer.nexmo.com/api/number-insight#getNumberInsightAsync
|
121
131
|
#
|
122
132
|
def advanced_async(params)
|
123
|
-
request('/ni/advanced/async/json', params: params)
|
133
|
+
response = request('/ni/advanced/async/json', params: params)
|
134
|
+
|
135
|
+
raise Error, response[:status_message] unless response.status.zero?
|
136
|
+
|
137
|
+
response
|
124
138
|
end
|
125
139
|
end
|
126
140
|
end
|
data/lib/nexmo/numbers.rb
CHANGED
data/lib/nexmo/pricing.rb
CHANGED
data/lib/nexmo/pricing_types.rb
CHANGED
data/lib/nexmo/redact.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Nexmo
|
5
5
|
class Redact < Namespace
|
6
|
+
extend T::Sig
|
7
|
+
|
6
8
|
self.authentication = Basic
|
7
9
|
|
8
10
|
self.request_body = JSON
|
@@ -27,6 +29,7 @@ module Nexmo
|
|
27
29
|
#
|
28
30
|
# @see https://developer.nexmo.com/api/redact#redact-message
|
29
31
|
#
|
32
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
30
33
|
def transaction(params)
|
31
34
|
request('/v1/redact/transaction', params: params, type: Post)
|
32
35
|
end
|
data/lib/nexmo/response.rb
CHANGED
data/lib/nexmo/secrets.rb
CHANGED
data/lib/nexmo/signature.rb
CHANGED
data/lib/nexmo/sms.rb
CHANGED
@@ -13,11 +13,7 @@ module Nexmo
|
|
13
13
|
# @example
|
14
14
|
# response = client.sms.send(from: 'Ruby', to: '447700900000', text: 'Hello world')
|
15
15
|
#
|
16
|
-
#
|
17
|
-
# puts "Sent message id=#{response.messages.first.message_id}"
|
18
|
-
# else
|
19
|
-
# puts "Error: #{response.messages.first.error_text}"
|
20
|
-
# end
|
16
|
+
# puts "Sent message id=#{response.messages.first.message_id}"
|
21
17
|
#
|
22
18
|
# @option params [required, String] :from
|
23
19
|
# The name or number the message should be sent from.
|
@@ -96,7 +92,7 @@ module Nexmo
|
|
96
92
|
#
|
97
93
|
# @see https://developer.nexmo.com/api/sms#send-an-sms
|
98
94
|
#
|
99
|
-
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::
|
95
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
100
96
|
def send(params)
|
101
97
|
if unicode?(params.fetch(:text)) && params[:type] != 'unicode'
|
102
98
|
message = 'Sending unicode text SMS without setting the type parameter to "unicode". ' \
|
@@ -106,14 +102,20 @@ module Nexmo
|
|
106
102
|
logger.warn(message)
|
107
103
|
end
|
108
104
|
|
109
|
-
request('/sms/json', params: hyphenate(params), type: Post
|
105
|
+
response = request('/sms/json', params: hyphenate(params), type: Post)
|
106
|
+
|
107
|
+
unless response.messages.first.status == '0'
|
108
|
+
raise Error, response.messages.first[:error_text]
|
109
|
+
end
|
110
|
+
|
111
|
+
response
|
110
112
|
end
|
111
113
|
|
112
114
|
private
|
113
115
|
|
114
116
|
sig { params(text: String).returns(T::Boolean) }
|
115
117
|
def unicode?(text)
|
116
|
-
!GSM7.encoded?(text)
|
118
|
+
!Nexmo::GSM7.encoded?(text)
|
117
119
|
end
|
118
120
|
end
|
119
121
|
end
|
data/lib/nexmo/tfa.rb
CHANGED
data/lib/nexmo/verify.rb
CHANGED
@@ -1,14 +1,13 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Nexmo
|
5
5
|
class Verify < Namespace
|
6
|
+
extend T::Sig
|
6
7
|
alias_method :http_request, :request
|
7
8
|
|
8
9
|
private :http_request
|
9
10
|
|
10
|
-
self.response_class = Response
|
11
|
-
|
12
11
|
# Generate and send a PIN to your user.
|
13
12
|
#
|
14
13
|
# @note You can make a maximum of one Verify request per second.
|
@@ -16,11 +15,7 @@ module Nexmo
|
|
16
15
|
# @example
|
17
16
|
# response = client.verify.request(number: '447700900000', brand: 'Acme Inc')
|
18
17
|
#
|
19
|
-
#
|
20
|
-
# puts "Started verification request_id=#{response.request_id}"
|
21
|
-
# else
|
22
|
-
# puts "Error: #{response.error_text}"
|
23
|
-
# end
|
18
|
+
# puts "Started verification request_id=#{response.request_id}"
|
24
19
|
#
|
25
20
|
# @option params [required, String] :number
|
26
21
|
# The mobile or landline phone number to verify.
|
@@ -65,8 +60,13 @@ module Nexmo
|
|
65
60
|
#
|
66
61
|
# @see https://developer.nexmo.com/api/verify#verifyRequest
|
67
62
|
#
|
68
|
-
|
69
|
-
|
63
|
+
sig { params(params: T.untyped, uri: T.untyped).returns(T.untyped) }
|
64
|
+
def request(params, uri = '/verify/json')
|
65
|
+
response = http_request(uri, params: params, type: Post)
|
66
|
+
|
67
|
+
raise Error, response[:error_text] if error?(response)
|
68
|
+
|
69
|
+
response
|
70
70
|
end
|
71
71
|
|
72
72
|
# Confirm that the PIN you received from your user matches the one sent by Nexmo in your verification request.
|
@@ -74,11 +74,7 @@ module Nexmo
|
|
74
74
|
# @example
|
75
75
|
# response = client.verify.check(request_id: request_id, code: '1234')
|
76
76
|
#
|
77
|
-
#
|
78
|
-
# puts "Verification complete, event_id=#{response.event_id}"
|
79
|
-
# else
|
80
|
-
# puts "Error: #{response.error_text}"
|
81
|
-
# end
|
77
|
+
# puts "Verification complete, event_id=#{response.event_id}"
|
82
78
|
#
|
83
79
|
# @option params [required, String] :request_id
|
84
80
|
# The Verify request to check.
|
@@ -97,8 +93,13 @@ module Nexmo
|
|
97
93
|
#
|
98
94
|
# @see https://developer.nexmo.com/api/verify#verifyCheck
|
99
95
|
#
|
96
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
100
97
|
def check(params)
|
101
|
-
http_request('/verify/check/json', params: params, type: Post)
|
98
|
+
response = http_request('/verify/check/json', params: params, type: Post)
|
99
|
+
|
100
|
+
raise Error, response[:error_text] if error?(response)
|
101
|
+
|
102
|
+
response
|
102
103
|
end
|
103
104
|
|
104
105
|
# Check the status of past or current verification requests.
|
@@ -119,8 +120,13 @@ module Nexmo
|
|
119
120
|
#
|
120
121
|
# @see https://developer.nexmo.com/api/verify#verifySearch
|
121
122
|
#
|
123
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(T.any(T::Hash[Symbol, T.untyped], Nexmo::Response)) }
|
122
124
|
def search(params)
|
123
|
-
http_request('/verify/search/json', params: params)
|
125
|
+
response = http_request('/verify/search/json', params: params)
|
126
|
+
|
127
|
+
raise Error, response[:error_text] if error?(response)
|
128
|
+
|
129
|
+
response
|
124
130
|
end
|
125
131
|
|
126
132
|
# Control the progress of your verification requests.
|
@@ -141,8 +147,13 @@ module Nexmo
|
|
141
147
|
#
|
142
148
|
# @see https://developer.nexmo.com/api/verify#verifyControl
|
143
149
|
#
|
150
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(T.untyped) }
|
144
151
|
def control(params)
|
145
|
-
http_request('/verify/control/json', params: params, type: Post)
|
152
|
+
response = http_request('/verify/control/json', params: params, type: Post)
|
153
|
+
|
154
|
+
raise Error, response[:error_text] if error?(response)
|
155
|
+
|
156
|
+
response
|
146
157
|
end
|
147
158
|
|
148
159
|
# Cancel an existing verification request.
|
@@ -156,6 +167,7 @@ module Nexmo
|
|
156
167
|
#
|
157
168
|
# @see https://developer.nexmo.com/api/verify#verifyControl
|
158
169
|
#
|
170
|
+
sig { params(id: String).returns(Nexmo::Response) }
|
159
171
|
def cancel(id)
|
160
172
|
control(request_id: id, cmd: 'cancel')
|
161
173
|
end
|
@@ -171,8 +183,71 @@ module Nexmo
|
|
171
183
|
#
|
172
184
|
# @see https://developer.nexmo.com/api/verify#verifyControl
|
173
185
|
#
|
186
|
+
sig { params(id: String).returns(Nexmo::Response) }
|
174
187
|
def trigger_next_event(id)
|
175
188
|
control(request_id: id, cmd: 'trigger_next_event')
|
176
189
|
end
|
190
|
+
|
191
|
+
# Send a PSD2-compliant payment token to a user for payment authorization
|
192
|
+
#
|
193
|
+
# @example
|
194
|
+
# response = client.verify.psd2(number: '447700900000', payee: 'Acme Inc', amount: 48.00)
|
195
|
+
#
|
196
|
+
# @option params [required, String] :number
|
197
|
+
# The mobile or landline phone number to verify.
|
198
|
+
# Unless you are setting **:country** explicitly, this number must be in E.164 format.
|
199
|
+
#
|
200
|
+
# @option params [String] :country
|
201
|
+
# If you do not provide **:number** in international format or you are not sure if **:number** is correctly formatted, specify the two-character country code in **:country**.
|
202
|
+
# Verify will then format the number for you.
|
203
|
+
#
|
204
|
+
# @option params [required, String] :payee
|
205
|
+
# An alphanumeric string to indicate to the user the name of the recipient that they are confirming a payment to.
|
206
|
+
#
|
207
|
+
# @option params [required, Float] :amount
|
208
|
+
# The decimal amount of the payment to be confirmed, in Euros
|
209
|
+
#
|
210
|
+
# @option params [Integer] :code_length
|
211
|
+
# The length of the verification code.
|
212
|
+
#
|
213
|
+
# @option params [String] :lg
|
214
|
+
# By default, the SMS or text-to-speech (TTS) message is generated in the locale that matches the **:number**.
|
215
|
+
# For example, the text message or TTS message for a `33*` number is sent in French.
|
216
|
+
# Use this parameter to explicitly control the language, accent and gender used for the Verify request.
|
217
|
+
#
|
218
|
+
# @option params [Integer] :pin_expiry
|
219
|
+
# How log the generated verification code is valid for, in seconds.
|
220
|
+
# When you specify both **:pin_expiry** and **:next_event_wait** then **:pin_expiry** must be an integer multiple of **:next_event_wait** otherwise **:pin_expiry** is defaulted to equal **:next_event_wait**.
|
221
|
+
# See [changing the event timings](https://developer.nexmo.com/verify/guides/changing-default-timings).
|
222
|
+
#
|
223
|
+
# @option params [Integer] :next_event_wait
|
224
|
+
# Specifies the wait time in seconds between attempts to deliver the verification code.
|
225
|
+
#
|
226
|
+
# @option params [Integer] :workflow_id
|
227
|
+
# Selects the predefined sequence of SMS and TTS (Text To Speech) actions to use in order to convey the PIN to your user.
|
228
|
+
# For example, an id of 1 identifies the workflow SMS - TTS - TTS.
|
229
|
+
# For a list of all workflows and their associated ids, please visit the [developer portal](https://developer.nexmo.com/verify/guides/workflows-and-events).
|
230
|
+
#
|
231
|
+
# @param [Hash] params
|
232
|
+
#
|
233
|
+
# @return [Response]
|
234
|
+
#
|
235
|
+
# @see https://developer.nexmo.com/api/verify#verifyRequestWithPSD2
|
236
|
+
#
|
237
|
+
sig { params(params: T.untyped, uri: T.untyped).returns(T.any(Nexmo::Error, Nexmo::Response)) }
|
238
|
+
def psd2(params, uri = '/verify/psd2/json')
|
239
|
+
response = http_request(uri, params: params, type: Post)
|
240
|
+
|
241
|
+
raise Error, response[:error_text] if error?(response)
|
242
|
+
|
243
|
+
response
|
244
|
+
end
|
245
|
+
|
246
|
+
private
|
247
|
+
|
248
|
+
sig { params(response: T.untyped).returns(T::Boolean) }
|
249
|
+
def error?(response)
|
250
|
+
response.respond_to?(:error_text)
|
251
|
+
end
|
177
252
|
end
|
178
253
|
end
|
data/lib/nexmo/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: true
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Nexmo
|
5
|
-
class
|
5
|
+
class Voice < Namespace
|
6
6
|
self.authentication = BearerToken
|
7
7
|
|
8
8
|
self.request_body = JSON
|
@@ -10,7 +10,7 @@ module Nexmo
|
|
10
10
|
# Create an outbound Call.
|
11
11
|
#
|
12
12
|
# @example
|
13
|
-
# response = client.
|
13
|
+
# response = client.voice.create({
|
14
14
|
# to: [{type: 'phone', number: '14843331234'}],
|
15
15
|
# from: {type: 'phone', number: '14843335555'},
|
16
16
|
# answer_url: ['https://example.com/answer']
|
@@ -61,7 +61,7 @@ module Nexmo
|
|
61
61
|
# Get details of your calls.
|
62
62
|
#
|
63
63
|
# @example
|
64
|
-
# response = client.
|
64
|
+
# response = client.voice.list
|
65
65
|
# response.each do |item|
|
66
66
|
# puts "#{item.uuid} #{item.direction} #{item.status}"
|
67
67
|
# end
|
@@ -100,7 +100,7 @@ module Nexmo
|
|
100
100
|
# Get detail of a specific call.
|
101
101
|
#
|
102
102
|
# @example
|
103
|
-
# response = client.
|
103
|
+
# response = client.voice.get(id)
|
104
104
|
#
|
105
105
|
# @param [String] id
|
106
106
|
#
|
@@ -115,7 +115,7 @@ module Nexmo
|
|
115
115
|
# Modify an in progress call.
|
116
116
|
#
|
117
117
|
# @example
|
118
|
-
# response = client.
|
118
|
+
# response = client.voice.update(id, action: 'hangup')
|
119
119
|
#
|
120
120
|
# @option params [required, String] :action
|
121
121
|
#
|
@@ -136,7 +136,7 @@ module Nexmo
|
|
136
136
|
# Hangup an in progress call.
|
137
137
|
#
|
138
138
|
# @example
|
139
|
-
# response = client.
|
139
|
+
# response = client.voice.hangup(id)
|
140
140
|
#
|
141
141
|
# @param [String] id
|
142
142
|
#
|
@@ -151,7 +151,7 @@ module Nexmo
|
|
151
151
|
# Mute an in progress call.
|
152
152
|
#
|
153
153
|
# @example
|
154
|
-
# response = client.
|
154
|
+
# response = client.voice.mute(id)
|
155
155
|
#
|
156
156
|
# @param [String] id
|
157
157
|
#
|
@@ -166,7 +166,7 @@ module Nexmo
|
|
166
166
|
# Unmute an in progress call.
|
167
167
|
#
|
168
168
|
# @example
|
169
|
-
# response = client.
|
169
|
+
# response = client.voice.unmute(id)
|
170
170
|
#
|
171
171
|
# @param [String] id
|
172
172
|
#
|
@@ -181,7 +181,7 @@ module Nexmo
|
|
181
181
|
# Earmuff an in progress call.
|
182
182
|
#
|
183
183
|
# @example
|
184
|
-
# response = client.
|
184
|
+
# response = client.voice.earmuff(id)
|
185
185
|
#
|
186
186
|
# @param [String] id
|
187
187
|
#
|
@@ -196,7 +196,7 @@ module Nexmo
|
|
196
196
|
# Unearmuff an in progress call.
|
197
197
|
#
|
198
198
|
# @example
|
199
|
-
# response = client.
|
199
|
+
# response = client.voice.unearmuff(id)
|
200
200
|
#
|
201
201
|
# @param [String] id
|
202
202
|
#
|
@@ -216,7 +216,7 @@ module Nexmo
|
|
216
216
|
# url: ['https://example.com/ncco.json']
|
217
217
|
# }
|
218
218
|
#
|
219
|
-
# response = client.
|
219
|
+
# response = client.voice.transfer(id, destination: destination)
|
220
220
|
#
|
221
221
|
# @param [String] id
|
222
222
|
# @param [Hash] destination
|