messagebird-rest 1.3.3 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +58 -8
- data/lib/messagebird.rb +15 -6
- data/lib/messagebird/balance.rb +2 -0
- data/lib/messagebird/base.rb +12 -7
- data/lib/messagebird/call_flow.rb +22 -0
- data/lib/messagebird/call_flow/step.rb +9 -0
- data/lib/messagebird/callflow.rb +60 -0
- data/lib/messagebird/client.rb +400 -64
- data/lib/messagebird/contact.rb +33 -0
- data/lib/messagebird/contact_reference.rb +9 -0
- data/lib/messagebird/conversation.rb +44 -0
- data/lib/messagebird/conversation_channel.rb +18 -0
- data/lib/messagebird/conversation_client.rb +22 -0
- data/lib/messagebird/conversation_message.rb +10 -0
- data/lib/messagebird/conversation_webhook.rb +9 -0
- data/lib/messagebird/custom_details.rb +10 -0
- data/lib/messagebird/error.rb +2 -0
- data/lib/messagebird/group.rb +23 -0
- data/lib/messagebird/group_reference.rb +9 -0
- data/lib/messagebird/hlr.rb +8 -6
- data/lib/messagebird/http_client.rb +95 -0
- data/lib/messagebird/list.rb +24 -0
- data/lib/messagebird/lookup.rb +7 -5
- data/lib/messagebird/message.rb +9 -7
- data/lib/messagebird/message_reference.rb +9 -0
- data/lib/messagebird/number.rb +18 -0
- data/lib/messagebird/number_client.rb +22 -0
- data/lib/messagebird/recipient.rb +6 -3
- data/lib/messagebird/signed_request.rb +50 -0
- data/lib/messagebird/verify.rb +8 -6
- data/lib/messagebird/version.rb +7 -0
- data/lib/messagebird/voice/base.rb +16 -0
- data/lib/messagebird/voice/call.rb +22 -0
- data/lib/messagebird/voice/call_leg.rb +11 -0
- data/lib/messagebird/voice/call_leg_recording.rb +20 -0
- data/lib/messagebird/voice/client.rb +22 -0
- data/lib/messagebird/voice/list.rb +24 -0
- data/lib/messagebird/voice/transcription.rb +15 -0
- data/lib/messagebird/voice/webhook.rb +11 -0
- data/lib/messagebird/voice_client.rb +25 -0
- data/lib/messagebird/voicemessage.rb +8 -7
- metadata +79 -9
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'messagebird/base'
|
4
|
+
require 'messagebird/custom_details'
|
5
|
+
require 'messagebird/group_reference'
|
6
|
+
require 'messagebird/message_reference'
|
7
|
+
|
8
|
+
module MessageBird
|
9
|
+
class Contact < MessageBird::Base
|
10
|
+
attr_accessor :id, :href, :msisdn, :first_name, :last_name
|
11
|
+
attr_reader :custom_details, :groups, :messages, :created_datetime, :updated_datetime
|
12
|
+
|
13
|
+
def custom_details=(value)
|
14
|
+
@custom_details = MessageBird::CustomDetails.new(value)
|
15
|
+
end
|
16
|
+
|
17
|
+
def groups=(value)
|
18
|
+
@groups = MessageBird::GroupReference.new(value)
|
19
|
+
end
|
20
|
+
|
21
|
+
def messages=(value)
|
22
|
+
@messages = MessageBird::MessageReference.new(value)
|
23
|
+
end
|
24
|
+
|
25
|
+
def created_datetime=(value)
|
26
|
+
@created_datetime = value_to_time(value)
|
27
|
+
end
|
28
|
+
|
29
|
+
def updated_datetime=(value)
|
30
|
+
@updated_datetime = value_to_time(value)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'messagebird/base'
|
4
|
+
require 'messagebird/contact'
|
5
|
+
require 'messagebird/conversation_channel'
|
6
|
+
|
7
|
+
module MessageBird
|
8
|
+
class Conversation < MessageBird::Base
|
9
|
+
attr_accessor :id, :status, :last_used_channel_id, :contact_id
|
10
|
+
attr_reader :contact, :channels, :messages, :created_datetime,
|
11
|
+
:updated_datetime, :last_received_datetime
|
12
|
+
|
13
|
+
CONVERSATION_STATUS_ACTIVE = 'active'
|
14
|
+
CONVERSATION_STATUS_ARCHIVED = 'archived'
|
15
|
+
WEBHOOK_EVENT_CONVERSATION_CREATED = 'conversation.created'
|
16
|
+
WEBHOOK_EVENT_CONVERSATION_UPDATED = 'conversation.updated'
|
17
|
+
WEBHOOK_EVENT_MESSAGE_CREATED = 'message.created'
|
18
|
+
WEBHOOK_EVENT_MESSAGE_UPDATED = 'message.updated'
|
19
|
+
|
20
|
+
def contact=(value)
|
21
|
+
@contact = Contact.new(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def channels=(json)
|
25
|
+
@channels = json.map { |c| MessageBird::ConversationChannel.new(c) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def messages=(value)
|
29
|
+
@messages = MessageBird::MessageReference.new(value)
|
30
|
+
end
|
31
|
+
|
32
|
+
def created_datetime=(value)
|
33
|
+
@created_datetime = value_to_time(value)
|
34
|
+
end
|
35
|
+
|
36
|
+
def updated_datetime=(value)
|
37
|
+
@updated_datetime = value_to_time(value)
|
38
|
+
end
|
39
|
+
|
40
|
+
def last_received_datetime=(value)
|
41
|
+
@last_received_datetime = value_to_time(value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'messagebird/base'
|
4
|
+
|
5
|
+
module MessageBird
|
6
|
+
class ConversationChannel < MessageBird::Base
|
7
|
+
attr_accessor :id, :name, :platform_id, :status
|
8
|
+
attr_reader :created_datetime, :updated_datetime
|
9
|
+
|
10
|
+
def created_datetime=(value)
|
11
|
+
@created_datetime = value_to_time(value)
|
12
|
+
end
|
13
|
+
|
14
|
+
def updated_datetime=(value)
|
15
|
+
@updated_datetime = value_to_time(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'net/https'
|
4
|
+
require 'uri'
|
5
|
+
require 'json'
|
6
|
+
require 'messagebird/http_client'
|
7
|
+
|
8
|
+
module MessageBird
|
9
|
+
class ConversationClient < HttpClient
|
10
|
+
ENDPOINT = 'https://conversations.messagebird.com/v1/'
|
11
|
+
|
12
|
+
def prepare_request(request, params = {})
|
13
|
+
request['Content-Type'] = 'application/json'
|
14
|
+
request.body = params.to_json
|
15
|
+
request
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def endpoint
|
20
|
+
ENDPOINT
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'messagebird/base'
|
4
|
+
|
5
|
+
module MessageBird
|
6
|
+
class ConversationMessage < MessageBird::Base
|
7
|
+
attr_accessor :id, :conversation_id, :channel_id, :direction, :status,
|
8
|
+
:type, :content, :created_datetime, :updated_datetime, :fallback
|
9
|
+
end
|
10
|
+
end
|
data/lib/messagebird/error.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'messagebird/base'
|
4
|
+
require 'messagebird/contact_reference'
|
5
|
+
|
6
|
+
module MessageBird
|
7
|
+
class Group < MessageBird::Base
|
8
|
+
attr_accessor :id, :href, :name
|
9
|
+
attr_reader :contacts, :created_datetime, :updated_datetime
|
10
|
+
|
11
|
+
def contacts=(value)
|
12
|
+
@contacts = MessageBird::ContactReference.new(value)
|
13
|
+
end
|
14
|
+
|
15
|
+
def created_datetime=(value)
|
16
|
+
@created_datetime = value_to_time(value)
|
17
|
+
end
|
18
|
+
|
19
|
+
def updated_datetime=(value)
|
20
|
+
@updated_datetime = value_to_time(value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/messagebird/hlr.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'time'
|
2
4
|
|
3
5
|
require 'messagebird/base'
|
4
6
|
|
5
7
|
module MessageBird
|
6
8
|
class HLR < MessageBird::Base
|
7
|
-
attr_accessor :id, :href, :msisdn, :network, :reference, :status,
|
8
|
-
|
9
|
+
attr_accessor :id, :href, :msisdn, :network, :reference, :status, :details
|
10
|
+
attr_reader :created_datetime, :status_datetime
|
9
11
|
|
10
|
-
def
|
11
|
-
@
|
12
|
+
def created_datetime=(value)
|
13
|
+
@created_datetime = value_to_time(value)
|
12
14
|
end
|
13
15
|
|
14
|
-
def
|
15
|
-
@
|
16
|
+
def status_datetime=(value)
|
17
|
+
@status_datetime = value_to_time(value)
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'net/https'
|
4
|
+
require 'uri'
|
5
|
+
|
6
|
+
module MessageBird
|
7
|
+
class ServerException < StandardError; end
|
8
|
+
class InvalidResponseException < StandardError; end
|
9
|
+
class MethodNotAllowedException < ArgumentError; end
|
10
|
+
|
11
|
+
class HttpClient
|
12
|
+
attr_reader :access_key
|
13
|
+
|
14
|
+
VALID_RESPONSE_CODES = [200, 201, 202, 204, 401, 404, 405, 422].freeze
|
15
|
+
ENDPOINT = 'https://rest.messagebird.com/'
|
16
|
+
SUBMIT_METHODS = [:patch, :post, :put].freeze
|
17
|
+
ALLOWED_METHODS = SUBMIT_METHODS.dup + [:get, :delete].freeze
|
18
|
+
|
19
|
+
def initialize(access_key)
|
20
|
+
@access_key = access_key
|
21
|
+
end
|
22
|
+
|
23
|
+
def endpoint
|
24
|
+
ENDPOINT
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_http_client(uri)
|
28
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
29
|
+
http.use_ssl = true
|
30
|
+
|
31
|
+
http.set_debug_output($stdout) unless ENV['DEBUG_MB_HTTP_CLIENT'].nil?
|
32
|
+
|
33
|
+
http
|
34
|
+
end
|
35
|
+
|
36
|
+
def request(method, path, params = {}, check_json = true)
|
37
|
+
uri = URI.join(endpoint, path)
|
38
|
+
http = build_http_client(uri)
|
39
|
+
request = build_request(method, uri, params)
|
40
|
+
|
41
|
+
# Execute the request and fetch the response.
|
42
|
+
response = http.request(request)
|
43
|
+
|
44
|
+
assert_valid_response_code(response.code.to_i)
|
45
|
+
assert_json_response_type(response['Content-Type']) unless check_json
|
46
|
+
|
47
|
+
response.body
|
48
|
+
end
|
49
|
+
|
50
|
+
def request_block(method, path, params = {}, &block)
|
51
|
+
uri = URI.join(endpoint, path)
|
52
|
+
http = build_http_client(uri)
|
53
|
+
request = build_request(method, uri, params)
|
54
|
+
|
55
|
+
http.request(request, block)
|
56
|
+
end
|
57
|
+
|
58
|
+
def prepare_request(request, params = {})
|
59
|
+
request.set_form_data(params)
|
60
|
+
|
61
|
+
request
|
62
|
+
end
|
63
|
+
|
64
|
+
def build_request(method, uri, params = {})
|
65
|
+
# Construct the HTTP request.
|
66
|
+
raise MethodNotAllowedException unless ALLOWED_METHODS.include?(method)
|
67
|
+
|
68
|
+
request = Class.const_get("Net::HTTP::#{method.to_s.capitalize}").new(uri.request_uri)
|
69
|
+
|
70
|
+
request['Accept'] = 'application/json'
|
71
|
+
request['Authorization'] = "AccessKey #{@access_key}"
|
72
|
+
request['User-Agent'] = "MessageBird/ApiClient/#{Version::STRING} Ruby/#{RUBY_VERSION}"
|
73
|
+
|
74
|
+
if SUBMIT_METHODS.include?(method) && !params.empty?
|
75
|
+
prepare_request(request, params)
|
76
|
+
end
|
77
|
+
|
78
|
+
request
|
79
|
+
end
|
80
|
+
|
81
|
+
# Throw an exception if the response code is not one we expect from the
|
82
|
+
# MessageBird API.
|
83
|
+
def assert_valid_response_code(code)
|
84
|
+
raise ServerException, 'Unknown response from server' unless VALID_RESPONSE_CODES.include? code
|
85
|
+
end
|
86
|
+
|
87
|
+
# Throw an exception if the response's content type is not JSON. This only
|
88
|
+
# checks the header: it doesn't inspect the actual body.
|
89
|
+
def assert_json_response_type(content_type)
|
90
|
+
# Check whether the header starts with application/json and don't check
|
91
|
+
# for equality: some API's may append the charset to this header.
|
92
|
+
raise InvalidResponseException, 'Response is not JSON' unless content_type.start_with? 'application/json'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'messagebird/base'
|
4
|
+
|
5
|
+
class List < MessageBird::Base
|
6
|
+
attr_accessor :offset, :limit, :count, :total_count, :links
|
7
|
+
attr_reader :items
|
8
|
+
|
9
|
+
# type will be used to create objects for the items, e.g.
|
10
|
+
# List.new(Contact, {}).
|
11
|
+
def initialize(type, json)
|
12
|
+
@type = type
|
13
|
+
|
14
|
+
super(json)
|
15
|
+
end
|
16
|
+
|
17
|
+
def items=(value)
|
18
|
+
@items = value.map { |i| @type.new i }
|
19
|
+
end
|
20
|
+
|
21
|
+
def [](index)
|
22
|
+
@items[index]
|
23
|
+
end
|
24
|
+
end
|
data/lib/messagebird/lookup.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'time'
|
2
4
|
|
3
5
|
require 'messagebird/base'
|
4
6
|
|
5
7
|
module MessageBird
|
6
8
|
class Lookup < MessageBird::Base
|
7
|
-
attr_accessor :href, :
|
9
|
+
attr_accessor :href, :country_code, :country_prefix, :phone_number, :type
|
8
10
|
attr_reader :formats, :hlr
|
9
11
|
|
10
|
-
def formats=(
|
11
|
-
@formats = Formats.new(
|
12
|
+
def formats=(new_formats)
|
13
|
+
@formats = Formats.new(new_formats)
|
12
14
|
end
|
13
15
|
|
14
|
-
def hlr=(
|
15
|
-
@hlr = HLR.new(
|
16
|
+
def hlr=(new_hlr)
|
17
|
+
@hlr = HLR.new(new_hlr)
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
data/lib/messagebird/message.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'messagebird/base'
|
2
4
|
require 'messagebird/recipient'
|
3
5
|
|
4
6
|
module MessageBird
|
5
7
|
class Message < MessageBird::Base
|
6
|
-
attr_accessor :id, :href, :direction, :type, :originator, :body,
|
7
|
-
:
|
8
|
-
|
8
|
+
attr_accessor :id, :href, :direction, :type, :originator, :body, :reference,
|
9
|
+
:validity, :gateway, :typeDetails, :datacoding, :mclass
|
10
|
+
attr_reader :scheduled_date_time, :created_datetime, :recipients
|
9
11
|
|
10
|
-
def
|
11
|
-
@
|
12
|
+
def scheduled_date_time=(value)
|
13
|
+
@scheduled_date_time = value_to_time(value)
|
12
14
|
end
|
13
15
|
|
14
|
-
def
|
15
|
-
@
|
16
|
+
def created_datetime=(value)
|
17
|
+
@created_datetime = value_to_time(value)
|
16
18
|
end
|
17
19
|
|
18
20
|
def recipients=(json)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'messagebird/base'
|
4
|
+
|
5
|
+
module MessageBird
|
6
|
+
class Number < MessageBird::Base
|
7
|
+
attr_accessor :number, :country, :region, :locality, :features, :tags, :type, :status
|
8
|
+
attr_reader :created_at, :renewal_at
|
9
|
+
|
10
|
+
def created_at=(value)
|
11
|
+
@created_at = Time.parse(value)
|
12
|
+
end
|
13
|
+
|
14
|
+
def renewal_at=(value)
|
15
|
+
@renewal_at = Time.parse(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|