nexmo 5.8.0 → 5.9.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/nexmo.rb +1 -1
  4. data/lib/nexmo/account.rb +36 -1
  5. data/lib/nexmo/alerts.rb +46 -0
  6. data/lib/nexmo/applications.rb +118 -0
  7. data/lib/nexmo/applications_v2.rb +71 -0
  8. data/lib/nexmo/authentication/abstract.rb +3 -1
  9. data/lib/nexmo/authentication/basic.rb +3 -1
  10. data/lib/nexmo/authentication/bearer_token.rb +3 -1
  11. data/lib/nexmo/authentication/key_secret_params.rb +3 -1
  12. data/lib/nexmo/authentication/key_secret_query.rb +3 -1
  13. data/lib/nexmo/call_dtmf.rb +12 -0
  14. data/lib/nexmo/call_stream.rb +26 -0
  15. data/lib/nexmo/call_talk.rb +30 -0
  16. data/lib/nexmo/calls.rb +188 -0
  17. data/lib/nexmo/client.rb +77 -1
  18. data/lib/nexmo/conversation_events.rb +47 -0
  19. data/lib/nexmo/conversation_legs.rb +14 -0
  20. data/lib/nexmo/conversation_members.rb +74 -0
  21. data/lib/nexmo/conversation_users.rb +63 -0
  22. data/lib/nexmo/conversations.rb +110 -0
  23. data/lib/nexmo/errors.rb +41 -0
  24. data/lib/nexmo/errors/error.rb +0 -27
  25. data/lib/nexmo/form_data.rb +3 -1
  26. data/lib/nexmo/http.rb +3 -1
  27. data/lib/nexmo/json.rb +3 -1
  28. data/lib/nexmo/jwt.rb +25 -0
  29. data/lib/nexmo/keys.rb +3 -1
  30. data/lib/nexmo/logger.rb +3 -1
  31. data/lib/nexmo/namespace.rb +4 -2
  32. data/lib/nexmo/number_insight.rb +102 -0
  33. data/lib/nexmo/numbers.rb +155 -0
  34. data/lib/nexmo/params.rb +3 -1
  35. data/lib/nexmo/redact.rb +20 -0
  36. data/lib/nexmo/secrets.rb +53 -0
  37. data/lib/nexmo/signature.rb +24 -13
  38. data/lib/nexmo/sms.rb +88 -0
  39. data/lib/nexmo/user_agent.rb +3 -1
  40. data/lib/nexmo/verify.rb +144 -0
  41. data/lib/nexmo/version.rb +1 -1
  42. data/nexmo.gemspec +2 -0
  43. metadata +31 -3
  44. data/lib/nexmo/problem.rb +0 -20
@@ -6,18 +6,65 @@ module Nexmo
6
6
 
7
7
  self.request_body = JSON
8
8
 
9
+ # Create an event.
10
+ #
11
+ # @option params [required, String] :type
12
+ # Event type.
13
+ #
14
+ # @option params [String] :to
15
+ # Member ID.
16
+ #
17
+ # @option params [required, String] :from
18
+ # Member ID.
19
+ #
20
+ # @option params [Hash] :body
21
+ # Event Body.
22
+ #
23
+ # @param [String] conversation_id
24
+ # @param [Hash] params
25
+ #
26
+ # @return [Entity]
27
+ #
28
+ # @see https://developer.nexmo.com/api/conversation#createEvent
29
+ #
9
30
  def create(conversation_id, params)
10
31
  request('/beta/conversations/' + conversation_id + '/events', params: params, type: Post)
11
32
  end
12
33
 
34
+ # List events.
35
+ #
36
+ # @param [String] conversation_id
37
+ #
38
+ # @return [Entity]
39
+ #
40
+ # @see https://developer.nexmo.com/api/conversation#getEvents
41
+ #
13
42
  def list(conversation_id)
14
43
  request('/beta/conversations/' + conversation_id + '/events')
15
44
  end
16
45
 
46
+ # Retrieve an event.
47
+ #
48
+ # @param [String] conversation_id
49
+ # @param [String] event_id
50
+ #
51
+ # @return [Entity]
52
+ #
53
+ # @see https://developer.nexmo.com/api/conversation#getEvent
54
+ #
17
55
  def get(conversation_id, event_id)
18
56
  request('/beta/conversations/' + conversation_id + '/events/' + event_id.to_s)
19
57
  end
20
58
 
59
+ # Delete an event.
60
+ #
61
+ # @param [String] conversation_id
62
+ # @param [String] event_id
63
+ #
64
+ # @return [Entity]
65
+ #
66
+ # @see https://developer.nexmo.com/api/conversation#deleteEvent
67
+ #
21
68
  def delete(conversation_id, event_id)
22
69
  request('/beta/conversations/' + conversation_id + '/events/' + event_id.to_s, type: Delete)
23
70
  end
@@ -4,10 +4,24 @@ module Nexmo
4
4
  class ConversationLegs < Namespace
5
5
  self.authentication = BearerToken
6
6
 
7
+ # List legs.
8
+ #
9
+ # @return [Entity]
10
+ #
11
+ # @see https://developer.nexmo.com/api/conversation#listLegs
12
+ #
7
13
  def list
8
14
  request('/beta/legs')
9
15
  end
10
16
 
17
+ # Delete a leg.
18
+ #
19
+ # @param [String] leg_id
20
+ #
21
+ # @return [Entity]
22
+ #
23
+ # @see https://developer.nexmo.com/api/conversation#deleteLeg
24
+ #
11
25
  def delete(leg_id)
12
26
  request('/beta/legs/' + leg_id, type: Delete)
13
27
  end
@@ -6,22 +6,96 @@ module Nexmo
6
6
 
7
7
  self.request_body = JSON
8
8
 
9
+ # Create a member.
10
+ #
11
+ # @option params [String] :action
12
+ # Invite or join a member to a conversation.
13
+ # Must be one of: `invite` or `join`.
14
+ #
15
+ # @option params [required, String] :user_id
16
+ # User ID.
17
+ #
18
+ # @option params [String] :member_id
19
+ # Member ID.
20
+ #
21
+ # @option params [required, Hash] :channel
22
+ # A user who joins a conversation as a member can have one channel per membership type.
23
+ #
24
+ # @option params [Hash] :media
25
+ # Media Object.
26
+ #
27
+ # @option params [String] :knocking_id
28
+ # Knocker ID.
29
+ # A knocker is a pre-member of a conversation who does not exist yet.
30
+ #
31
+ # @option params [String] :member_id_inviting
32
+ # Member ID of the member that sends the invitation.
33
+ #
34
+ # @param [String] conversation_id
35
+ # @param [Hash] params
36
+ #
37
+ # @return [Entity]
38
+ #
39
+ # @see https://developer.nexmo.com/api/conversation#createMember
40
+ #
9
41
  def create(conversation_id, params)
10
42
  request('/beta/conversations/' + conversation_id + '/members', params: params, type: Post)
11
43
  end
12
44
 
45
+ # List members.
46
+ #
47
+ # @param [String] conversation_id
48
+ #
49
+ # @return [Entity]
50
+ #
51
+ # @see https://developer.nexmo.com/api/conversation#getMembers
52
+ #
13
53
  def list(conversation_id)
14
54
  request('/beta/conversations/' + conversation_id + '/members')
15
55
  end
16
56
 
57
+ # Retrieve a member.
58
+ #
59
+ # @param [String] conversation_id
60
+ # @param [String] member_id
61
+ #
62
+ # @return [Entity]
63
+ #
64
+ # @see https://developer.nexmo.com/api/conversation#getMember
65
+ #
17
66
  def get(conversation_id, member_id)
18
67
  request('/beta/conversations/' + conversation_id + '/members/' + member_id)
19
68
  end
20
69
 
70
+ # Update a member.
71
+ #
72
+ # @option params [String] :action
73
+ # Invite or join a member to a conversation.
74
+ #
75
+ # @option params [Hash] :channel
76
+ # A user who joins a conversation as a member can have one channel per membership type.
77
+ #
78
+ # @param [String] conversation_id
79
+ # @param [String] member_id
80
+ # @param [Hash] params
81
+ #
82
+ # @return [Entity]
83
+ #
84
+ # @see https://developer.nexmo.com/api/conversation#updateMember
85
+ #
21
86
  def update(conversation_id, member_id, params)
22
87
  request('/beta/conversations/' + conversation_id + '/members/' + member_id, params: params, type: Put)
23
88
  end
24
89
 
90
+ # Delete a member.
91
+ #
92
+ # @param [String] conversation_id
93
+ # @param [String] member_id
94
+ #
95
+ # @return [Entity]
96
+ #
97
+ # @see https://developer.nexmo.com/api/conversation#deleteMember
98
+ #
25
99
  def delete(conversation_id, member_id)
26
100
  request('/beta/conversations/' + conversation_id + '/members/' + member_id, type: Delete)
27
101
  end
@@ -6,22 +6,85 @@ module Nexmo
6
6
 
7
7
  self.request_body = JSON
8
8
 
9
+ # Create a user.
10
+ #
11
+ # @option params [String] :name
12
+ # Unique name for a user.
13
+ #
14
+ # @option params [String] :display_name
15
+ # A string to be displayed as user name.
16
+ # It does not need to be unique.
17
+ #
18
+ # @option params [String] :image_url
19
+ # A link to an image for conversations' and users' avatars.
20
+ #
21
+ # @param [Hash] params
22
+ #
23
+ # @return [Entity]
24
+ #
25
+ # @see https://developer.nexmo.com/api/conversation#createUser
26
+ #
9
27
  def create(params)
10
28
  request('/beta/users', params: params, type: Post)
11
29
  end
12
30
 
31
+ # List users.
32
+ #
33
+ # @return [Entity]
34
+ #
35
+ # @see https://developer.nexmo.com/api/conversation#getUsers
36
+ #
13
37
  def list
14
38
  request('/beta/users')
15
39
  end
16
40
 
41
+ # Retrieve a user.
42
+ #
43
+ # @param [String] id
44
+ #
45
+ # @return [Entity]
46
+ #
47
+ # @see https://developer.nexmo.com/api/conversation#getUser
48
+ #
17
49
  def get(id)
18
50
  request('/beta/users/' + id)
19
51
  end
20
52
 
53
+ # Update a user.
54
+ #
55
+ # @option params [String] :name
56
+ # Unique name for a user.
57
+ #
58
+ # @option params [String] :display_name
59
+ # A string to be displayed as user name.
60
+ # It does not need to be unique.
61
+ #
62
+ # @option params [String] :image_url
63
+ # A link to an image for conversations' and users' avatars.
64
+ #
65
+ # @option params [Hash] :channels
66
+ # A user who joins a conversation as a member can have one channel per membership type.
67
+ # Channels can be `app`, `phone`, `sip`, `websocket`, or `vbc`.
68
+ #
69
+ # @param [String] id
70
+ # @param [Hash] params
71
+ #
72
+ # @return [Entity]
73
+ #
74
+ # @see https://developer.nexmo.com/api/conversation#updateUser
75
+ #
21
76
  def update(id, params)
22
77
  request('/beta/users/' + id, params: params, type: Put)
23
78
  end
24
79
 
80
+ # Delete a user.
81
+ #
82
+ # @param [String] id
83
+ #
84
+ # @return [Entity]
85
+ #
86
+ # @see https://developer.nexmo.com/api/conversation#deleteUser
87
+ #
25
88
  def delete(id)
26
89
  request('/beta/users/' + id, type: Delete)
27
90
  end
@@ -6,38 +6,148 @@ module Nexmo
6
6
 
7
7
  self.request_body = JSON
8
8
 
9
+ # Create a conversation.
10
+ #
11
+ # @example
12
+ # response = client.conversations.create(name: 'Example Conversation', display_name: 'Example Display Name')
13
+ #
14
+ # @option params [String] :name
15
+ # Unique name for a conversation.
16
+ #
17
+ # @option params [String] :display_name
18
+ # The display name for the conversation.
19
+ # It does not have to be unique.
20
+ #
21
+ # @option params [String] :image_url
22
+ # A link to an image for conversations' and users' avatars.
23
+ #
24
+ # @option params [Hash] :numbers
25
+ # - **:sms** (String) phone number used for sms channel
26
+ # - **:pstn** (String) phone number used for pstn channel
27
+ #
28
+ # @option params [Hash] :properties
29
+ # - **:ttl** (Integer) After how many seconds an empty conversation is deleted
30
+ #
31
+ # @return [Entity]
32
+ #
33
+ # @see https://developer.nexmo.com/api/conversation#createConversation
34
+ #
9
35
  def create(params)
10
36
  request('/beta/conversations', params: params, type: Post)
11
37
  end
12
38
 
39
+ # List all conversations associated with your application.
40
+ #
41
+ # @example
42
+ # response = client.conversations.list
43
+ #
44
+ # @option params [String] :date_start
45
+ # Return the records that occurred after this point in time.
46
+ #
47
+ # @option params [String] :date_end
48
+ # Return the records that occurred before this point in time.
49
+ #
50
+ # @option params [Integer] :page_size
51
+ # Return this amount of records in the response.
52
+ #
53
+ # @option params [Integer] :record_index
54
+ # Return calls from this index in the response.
55
+ #
56
+ # @option params ['asc', 'desc'] :order
57
+ # Return the records in ascending or descending order.
58
+ #
59
+ # @param [Hash, nil] params
60
+ #
61
+ # @return [Entity]
62
+ #
63
+ # @see https://developer.nexmo.com/api/conversation#replaceConversation
64
+ #
13
65
  def list(params = nil)
14
66
  request('/beta/conversations', params: params)
15
67
  end
16
68
 
69
+ # Retrieve a conversation.
70
+ #
71
+ # @example
72
+ # response = client.conversations.get(id)
73
+ #
74
+ # @param [String] id
75
+ #
76
+ # @return [Entity]
77
+ #
78
+ # @see https://developer.nexmo.com/api/conversation#retrieveConversation
79
+ #
17
80
  def get(id)
18
81
  request('/beta/conversations/' + id)
19
82
  end
20
83
 
84
+ # Update a conversation.
85
+ #
86
+ # @example
87
+ # response = client.conversations.update(id, display_name: 'Updated conversation')
88
+ #
89
+ # @option params [String] :name
90
+ # Unique name for a conversation
91
+ #
92
+ # @option params [String] :display_name
93
+ # The display name for the conversation.
94
+ #
95
+ # @option params [String] :image_url
96
+ # A link to an image for conversations' and users' avatars.
97
+ #
98
+ # @option params [Hash] :numbers
99
+ # - **:sms** (String) phone number used for sms channel
100
+ # - **:pstn** (String) phone number used for pstn channel
101
+ #
102
+ # @option params [Hash] :properties
103
+ # - **:ttl** (Integer) After how many seconds an empty conversation is deleted
104
+ #
105
+ # @param [String] id
106
+ # @param [Hash] params
107
+ #
108
+ # @return [Entity]
109
+ #
110
+ # @see https://developer.nexmo.com/api/conversation#replaceConversation
111
+ #
21
112
  def update(id, params)
22
113
  request('/beta/conversations/' + id, params: params, type: Put)
23
114
  end
24
115
 
116
+ # Delete a conversation.
117
+ #
118
+ # @example
119
+ # response = client.conversations.delete(id)
120
+ #
121
+ # @param [String] id
122
+ #
123
+ # @return [Entity]
124
+ #
125
+ # @see https://developer.nexmo.com/api/conversation#deleteConversation
126
+ #
25
127
  def delete(id)
26
128
  request('/beta/conversations/' + id, type: Delete)
27
129
  end
28
130
 
131
+ # @return [ConversationEvents]
132
+ #
29
133
  def events
30
134
  @events ||= ConversationEvents.new(@client)
31
135
  end
32
136
 
137
+ # @return [ConversationLegs]
138
+ #
33
139
  def legs
34
140
  @legs ||= ConversationLegs.new(@client)
35
141
  end
36
142
 
143
+ # @return [ConversationMembers]
144
+ #
37
145
  def members
38
146
  @members ||= ConversationMembers.new(@client)
39
147
  end
40
148
 
149
+ # @return [ConversationUsers]
150
+ #
41
151
  def users
42
152
  @users ||= ConversationUsers.new(@client)
43
153
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+ require 'json'
3
+
4
+ module Nexmo
5
+ module Errors
6
+ def self.parse(response)
7
+ exception_class = case response
8
+ when Net::HTTPUnauthorized
9
+ AuthenticationError
10
+ when Net::HTTPClientError
11
+ ClientError
12
+ when Net::HTTPServerError
13
+ ServerError
14
+ else
15
+ Error
16
+ end
17
+
18
+ message = if response.content_type == 'application/json'
19
+ hash = ::JSON.parse(response.body)
20
+
21
+ if hash.key?('error_title')
22
+ hash['error_title']
23
+ elsif problem_details?(hash)
24
+ problem_details_message(hash)
25
+ end
26
+ end
27
+
28
+ exception_class.new(message)
29
+ end
30
+
31
+ def self.problem_details?(hash)
32
+ hash.key?('title') && hash.key?('detail') && hash.key?('type')
33
+ end
34
+
35
+ def self.problem_details_message(hash)
36
+ "#{hash['title']}. #{hash['detail']} See #{hash['type']} for more info, or email support@nexmo.com if you have any questions."
37
+ end
38
+ end
39
+
40
+ private_constant :Errors
41
+ end