messagebird-rest 1.3.2 → 2.0.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 +5 -5
- data/README.md +67 -17
- data/lib/messagebird.rb +16 -7
- 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 +420 -73
- 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 +20 -0
- 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 +85 -15
- data/lib/messagebird/otp.rb +0 -18
@@ -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
|