messagebird-rest 1.4.1 → 1.4.2
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 +4 -4
- data/lib/messagebird.rb +2 -2
- data/lib/messagebird/client.rb +89 -4
- data/lib/messagebird/contact.rb +3 -3
- data/lib/messagebird/conversation.rb +42 -0
- data/lib/messagebird/conversation_channel.rb +17 -0
- data/lib/messagebird/conversation_client.rb +19 -0
- data/lib/messagebird/conversation_message.rb +9 -0
- data/lib/messagebird/conversation_webhook.rb +7 -0
- data/lib/messagebird/group.rb +3 -3
- data/lib/messagebird/hlr.rb +2 -2
- data/lib/messagebird/http_client.rb +24 -9
- data/lib/messagebird/list.rb +1 -2
- data/lib/messagebird/message.rb +3 -3
- data/lib/messagebird/recipient.rb +2 -1
- data/lib/messagebird/signed_request.rb +47 -0
- data/lib/messagebird/verify.rb +2 -2
- data/lib/messagebird/voicemessage.rb +2 -3
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8af99a7a5eb2bb8576cfe1e880ed6443a13a962
|
4
|
+
data.tar.gz: c86b5b379a2e012af6494de574619ac0b0af5cc6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a223e47afb796eb24c1cba0ff1cb8d50d3a695f1586f2805703050692631076fd98392a024b30c701ff246c8184a5ad2f19a6c747cffcd3f2d6a1d9ac74fd85d
|
7
|
+
data.tar.gz: 879e546638600315f1dcb2bf3dbc45cd82f08d4f8ae7fa7949be49d26a50abe956571c711bb696adfc5a0a15ff8ae708350e5c5b5e85a25964aed9242aa8da24
|
data/lib/messagebird.rb
CHANGED
@@ -2,8 +2,7 @@ libdir = File.dirname(__FILE__)
|
|
2
2
|
$:.unshift(libdir) unless $:.include?(libdir)
|
3
3
|
|
4
4
|
module MessageBird
|
5
|
-
CLIENT_VERSION
|
6
|
-
ENDPOINT = 'https://rest.messagebird.com'
|
5
|
+
CLIENT_VERSION = '1.4.2'
|
7
6
|
end
|
8
7
|
|
9
8
|
require 'messagebird/balance'
|
@@ -14,6 +13,7 @@ require 'messagebird/group_reference'
|
|
14
13
|
require 'messagebird/hlr'
|
15
14
|
require 'messagebird/http_client'
|
16
15
|
require 'messagebird/message_reference'
|
16
|
+
require 'messagebird/signed_request'
|
17
17
|
require 'messagebird/verify'
|
18
18
|
require 'messagebird/message'
|
19
19
|
require 'messagebird/voicemessage'
|
data/lib/messagebird/client.rb
CHANGED
@@ -4,6 +4,10 @@ require 'uri'
|
|
4
4
|
|
5
5
|
require 'messagebird/balance'
|
6
6
|
require 'messagebird/contact'
|
7
|
+
require 'messagebird/conversation'
|
8
|
+
require 'messagebird/conversation_client'
|
9
|
+
require 'messagebird/conversation_message'
|
10
|
+
require 'messagebird/conversation_webhook'
|
7
11
|
require 'messagebird/error'
|
8
12
|
require 'messagebird/group'
|
9
13
|
require 'messagebird/hlr'
|
@@ -24,20 +28,28 @@ module MessageBird
|
|
24
28
|
end
|
25
29
|
|
26
30
|
class Client
|
27
|
-
|
28
|
-
attr_reader :access_key
|
29
|
-
attr_reader :http_client
|
31
|
+
attr_reader :access_key, :http_client, :conversation_client
|
30
32
|
|
31
33
|
def initialize(access_key = nil, http_client = nil)
|
32
34
|
@access_key = access_key || ENV['MESSAGEBIRD_ACCESS_KEY']
|
33
35
|
@http_client = http_client || HttpClient.new(@access_key)
|
36
|
+
@conversation_client = http_client || ConversationClient.new(@access_key)
|
37
|
+
end
|
38
|
+
|
39
|
+
def conversation_request(method, path, params={})
|
40
|
+
response_body = @conversation_client.request(method, path, params)
|
41
|
+
return if response_body.nil? || response_body.empty?
|
42
|
+
parse_body(response_body)
|
34
43
|
end
|
35
44
|
|
36
45
|
def request(method, path, params={})
|
37
46
|
response_body = @http_client.request(method, path, params)
|
38
47
|
return if response_body.empty?
|
48
|
+
parse_body(response_body)
|
49
|
+
end
|
39
50
|
|
40
|
-
|
51
|
+
def parse_body(body)
|
52
|
+
json = JSON.parse(body)
|
41
53
|
|
42
54
|
# If the request returned errors, create Error objects and raise.
|
43
55
|
if json.has_key?('errors')
|
@@ -47,6 +59,79 @@ module MessageBird
|
|
47
59
|
json
|
48
60
|
end
|
49
61
|
|
62
|
+
## Conversations
|
63
|
+
# Send a conversation message
|
64
|
+
def send_conversation_message(from, to, params={})
|
65
|
+
ConversationMessage.new(conversation_request(
|
66
|
+
:post,
|
67
|
+
'send',
|
68
|
+
params.merge({
|
69
|
+
:from => from,
|
70
|
+
:to => to,
|
71
|
+
})))
|
72
|
+
end
|
73
|
+
|
74
|
+
# Start a conversation
|
75
|
+
def start_conversation(to, channelId, params={})
|
76
|
+
Conversation.new(conversation_request(
|
77
|
+
:post,
|
78
|
+
'conversations/start',
|
79
|
+
params.merge({
|
80
|
+
:to => to,
|
81
|
+
:channelId => channelId,
|
82
|
+
})))
|
83
|
+
end
|
84
|
+
|
85
|
+
def conversation_list(limit = 0, offset = 0)
|
86
|
+
List.new(Conversation, conversation_request(:get, "conversations?limit=#{limit}&offset=#{offset}"))
|
87
|
+
end
|
88
|
+
|
89
|
+
def conversation(id)
|
90
|
+
Conversation.new(conversation_request(:get, "conversations/#{id}"))
|
91
|
+
end
|
92
|
+
|
93
|
+
def conversation_update(id, status)
|
94
|
+
Conversation.new(conversation_request(:patch, "conversations/#{id}", :status => status))
|
95
|
+
end
|
96
|
+
|
97
|
+
def conversation_reply(id, params={})
|
98
|
+
ConversationMessage.new(conversation_request(:post, "conversations/#{id}/messages", params))
|
99
|
+
end
|
100
|
+
|
101
|
+
def conversation_messages_list(id, limit=0, offset=0)
|
102
|
+
List.new(ConversationMessage, conversation_request(:get, "conversations/#{id}/messages?limit=#{limit}&offset=#{offset}"))
|
103
|
+
end
|
104
|
+
|
105
|
+
def conversation_message(id)
|
106
|
+
ConversationMessage.new(conversation_request(:get, "messages/#{id}"))
|
107
|
+
end
|
108
|
+
|
109
|
+
def conversation_webhook_create(channelId, url, events=[])
|
110
|
+
ConversationWebhook.new(conversation_request(
|
111
|
+
:post,
|
112
|
+
"webhooks",
|
113
|
+
:channelId => channelId,
|
114
|
+
:url => url,
|
115
|
+
:events => events
|
116
|
+
))
|
117
|
+
end
|
118
|
+
|
119
|
+
def conversation_webhooks_list(limit=0, offset=0)
|
120
|
+
List.new(ConversationWebhook, conversation_request(:get,"webhooks?limit=#{limit}&offset=#{offset}"))
|
121
|
+
end
|
122
|
+
|
123
|
+
def conversation_webhook_update(id, params={})
|
124
|
+
ConversationWebhook.new(conversation_request(:patch,"webhooks/#{id}",params))
|
125
|
+
end
|
126
|
+
|
127
|
+
def conversation_webhook(id)
|
128
|
+
ConversationWebhook.new(conversation_request(:get,"webhooks/#{id}"))
|
129
|
+
end
|
130
|
+
|
131
|
+
def conversation_webhook_delete(id)
|
132
|
+
conversation_request(:delete,"webhooks/#{id}")
|
133
|
+
end
|
134
|
+
|
50
135
|
# Retrieve your balance.
|
51
136
|
def balance
|
52
137
|
Balance.new(request(:get, 'balance'))
|
data/lib/messagebird/contact.rb
CHANGED
@@ -5,8 +5,8 @@ require 'messagebird/message_reference'
|
|
5
5
|
|
6
6
|
module MessageBird
|
7
7
|
class Contact < MessageBird::Base
|
8
|
-
attr_accessor :id, :href, :msisdn, :firstName, :lastName
|
9
|
-
|
8
|
+
attr_accessor :id, :href, :msisdn, :firstName, :lastName
|
9
|
+
attr_reader :customDetails, :groups, :messages, :createdDatetime, :updatedDatetime
|
10
10
|
|
11
11
|
def customDetails=(value)
|
12
12
|
@customDetails = MessageBird::CustomDetails.new(value)
|
@@ -28,4 +28,4 @@ module MessageBird
|
|
28
28
|
@updatedDatetime = value_to_time(value)
|
29
29
|
end
|
30
30
|
end
|
31
|
-
end
|
31
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'messagebird/base'
|
2
|
+
require 'messagebird/contact'
|
3
|
+
require 'messagebird/conversation_channel'
|
4
|
+
|
5
|
+
module MessageBird
|
6
|
+
class Conversation < MessageBird::Base
|
7
|
+
attr_accessor :id, :status, :lastUsedChannelId, :contactId
|
8
|
+
attr_reader :contact, :channels, :messages, :createdDatetime,
|
9
|
+
:updatedDatetime, :lastReceivedDatetime
|
10
|
+
|
11
|
+
CONVERSATION_STATUS_ACTIVE = 'active'
|
12
|
+
CONVERSATION_STATUS_ARCHIVED = 'archived'
|
13
|
+
WEBHOOK_EVENT_CONVERSATION_CREATED = 'conversation.created'
|
14
|
+
WEBHOOK_EVENT_CONVERSATION_UPDATED = 'conversation.updated'
|
15
|
+
WEBHOOK_EVENT_MESSAGE_CREATED = 'message.created'
|
16
|
+
WEBHOOK_EVENT_MESSAGE_UPDATED = 'message.updated'
|
17
|
+
|
18
|
+
def contact=(value)
|
19
|
+
@contact = Contact.new(value)
|
20
|
+
end
|
21
|
+
|
22
|
+
def channels=(json)
|
23
|
+
@channels = json.map { |c| MessageBird::ConversationChannel.new(c) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def messages=(value)
|
27
|
+
@messages = MessageBird::MessageReference.new(value)
|
28
|
+
end
|
29
|
+
|
30
|
+
def createdDatetime=(value)
|
31
|
+
@createdDatetime = value_to_time(value)
|
32
|
+
end
|
33
|
+
|
34
|
+
def updatedDatetime=(value)
|
35
|
+
@updatedDatetime = value_to_time(value)
|
36
|
+
end
|
37
|
+
|
38
|
+
def lastReceivedDatetime=(value)
|
39
|
+
@lastReceivedDatetime = value_to_time(value)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'messagebird/base'
|
2
|
+
|
3
|
+
module MessageBird
|
4
|
+
class ConversationChannel < MessageBird::Base
|
5
|
+
attr_accessor :id, :name, :platformId, :status
|
6
|
+
attr_reader :createdDatetime, :updatedDatetime
|
7
|
+
|
8
|
+
def createdDatetime=(value)
|
9
|
+
@createdDatetime = value_to_time(value)
|
10
|
+
end
|
11
|
+
|
12
|
+
def updatedDatetime=(value)
|
13
|
+
@updatedDatetime = value_to_time(value)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'net/https'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
require 'messagebird/http_client'
|
5
|
+
|
6
|
+
module MessageBird
|
7
|
+
class ConversationClient < HttpClient
|
8
|
+
ENDPOINT = 'https://conversations.messagebird.com/v1/'
|
9
|
+
|
10
|
+
def endpoint()
|
11
|
+
ENDPOINT
|
12
|
+
end
|
13
|
+
|
14
|
+
def prepare_request(request, params={})
|
15
|
+
request.body = params.to_json
|
16
|
+
request
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/messagebird/group.rb
CHANGED
@@ -3,8 +3,8 @@ require 'messagebird/contact_reference'
|
|
3
3
|
|
4
4
|
module MessageBird
|
5
5
|
class Group < MessageBird::Base
|
6
|
-
attr_accessor :id, :href, :name
|
7
|
-
|
6
|
+
attr_accessor :id, :href, :name
|
7
|
+
attr_reader :contacts, :createdDatetime, :updatedDatetime
|
8
8
|
|
9
9
|
def contacts=(value)
|
10
10
|
@contacts = MessageBird::ContactReference.new(value)
|
@@ -18,4 +18,4 @@ module MessageBird
|
|
18
18
|
@updatedDatetime = value_to_time(value)
|
19
19
|
end
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end
|
data/lib/messagebird/hlr.rb
CHANGED
@@ -4,8 +4,8 @@ require 'messagebird/base'
|
|
4
4
|
|
5
5
|
module MessageBird
|
6
6
|
class HLR < MessageBird::Base
|
7
|
-
attr_accessor :id, :href, :msisdn, :network, :reference, :status,
|
8
|
-
|
7
|
+
attr_accessor :id, :href, :msisdn, :network, :reference, :status, :details
|
8
|
+
attr_reader :createdDatetime, :statusDatetime
|
9
9
|
|
10
10
|
def createdDatetime=(value)
|
11
11
|
@createdDatetime = value_to_time(value)
|
@@ -8,21 +8,30 @@ module MessageBird
|
|
8
8
|
class MethodNotAllowedException < ArgumentError; end
|
9
9
|
|
10
10
|
class HttpClient
|
11
|
-
|
12
11
|
attr_reader :access_key
|
13
12
|
|
13
|
+
ENDPOINT = 'https://rest.messagebird.com/'
|
14
|
+
|
14
15
|
def initialize(access_key)
|
15
16
|
@access_key = access_key
|
16
17
|
end
|
17
18
|
|
19
|
+
def endpoint()
|
20
|
+
ENDPOINT
|
21
|
+
end
|
22
|
+
|
18
23
|
def request(method, path, params={}, check_json=true)
|
19
|
-
uri = URI.join(
|
24
|
+
uri = URI.join(endpoint, path)
|
20
25
|
|
21
26
|
# Set up the HTTP object.
|
22
27
|
http = Net::HTTP.new(uri.host, uri.port)
|
23
|
-
http.use_ssl
|
28
|
+
http.use_ssl = true
|
29
|
+
|
30
|
+
unless ENV['DEBUG_MB_HTTP_CLIENT'].nil?
|
31
|
+
http.set_debug_output($stdout)
|
32
|
+
end
|
24
33
|
|
25
|
-
request =
|
34
|
+
request = build_request(method, uri, params)
|
26
35
|
|
27
36
|
# Execute the request and fetch the response.
|
28
37
|
response = http.request(request)
|
@@ -33,7 +42,12 @@ module MessageBird
|
|
33
42
|
response.body
|
34
43
|
end
|
35
44
|
|
36
|
-
def prepare_request(
|
45
|
+
def prepare_request(request, params={})
|
46
|
+
request.set_form_data(params)
|
47
|
+
request
|
48
|
+
end
|
49
|
+
|
50
|
+
def build_request(method, uri, params={})
|
37
51
|
# Construct the HTTP request.
|
38
52
|
case method
|
39
53
|
when :delete
|
@@ -52,8 +66,9 @@ module MessageBird
|
|
52
66
|
request['Authorization'] = "AccessKey #{@access_key}"
|
53
67
|
request['User-Agent'] = "MessageBird/ApiClient/#{CLIENT_VERSION} Ruby/#{RUBY_VERSION}"
|
54
68
|
|
55
|
-
|
56
|
-
|
69
|
+
if [:patch, :post].include?(method) && !params.empty?
|
70
|
+
prepare_request(request, params)
|
71
|
+
end
|
57
72
|
request
|
58
73
|
end
|
59
74
|
|
@@ -63,7 +78,7 @@ module MessageBird
|
|
63
78
|
# InvalidPhoneNumberException does not make a lot of sense here, but it's
|
64
79
|
# needed to maintain backwards compatibility. See issue:
|
65
80
|
# https://github.com/messagebird/ruby-rest-api/issues/17
|
66
|
-
expected_codes = [200, 201, 204, 401, 404, 405, 422]
|
81
|
+
expected_codes = [200, 201, 202, 204, 401, 404, 405, 422]
|
67
82
|
raise InvalidPhoneNumberException, 'Unknown response from server' unless expected_codes.include? code
|
68
83
|
end
|
69
84
|
|
@@ -77,4 +92,4 @@ module MessageBird
|
|
77
92
|
|
78
93
|
end
|
79
94
|
|
80
|
-
end
|
95
|
+
end
|
data/lib/messagebird/list.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'messagebird/base'
|
2
2
|
|
3
3
|
class List < MessageBird::Base
|
4
|
-
|
5
4
|
attr_accessor :offset, :limit, :count, :totalCount, :links, :items
|
6
5
|
|
7
6
|
# type will be used to create objects for the items, e.g.
|
@@ -20,4 +19,4 @@ class List < MessageBird::Base
|
|
20
19
|
@items[index]
|
21
20
|
end
|
22
21
|
|
23
|
-
end
|
22
|
+
end
|
data/lib/messagebird/message.rb
CHANGED
@@ -3,9 +3,9 @@ require 'messagebird/recipient'
|
|
3
3
|
|
4
4
|
module MessageBird
|
5
5
|
class Message < MessageBird::Base
|
6
|
-
attr_accessor :id, :href, :direction, :type, :originator, :body,
|
7
|
-
:
|
8
|
-
|
6
|
+
attr_accessor :id, :href, :direction, :type, :originator, :body, :reference,
|
7
|
+
:validity, :gateway, :typeDetails, :datacoding, :mclass
|
8
|
+
attr_reader :scheduledDatetime, :createdDatetime, :recipients
|
9
9
|
|
10
10
|
def scheduledDatetime=(value)
|
11
11
|
@scheduledDatetime = value_to_time(value)
|
@@ -2,7 +2,8 @@ require 'messagebird/base'
|
|
2
2
|
|
3
3
|
module MessageBird
|
4
4
|
class Recipient < MessageBird::Base
|
5
|
-
attr_accessor :recipient, :status
|
5
|
+
attr_accessor :recipient, :status
|
6
|
+
attr_reader :statusDatetime
|
6
7
|
|
7
8
|
def statusDatetime=(value)
|
8
9
|
@statusDatetime = value_to_time(value)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'digest'
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
module MessageBird
|
6
|
+
class ValidationException < TypeError;
|
7
|
+
end
|
8
|
+
|
9
|
+
class SignedRequest
|
10
|
+
def initialize(queryParameters, signature, requestTimestamp, body)
|
11
|
+
|
12
|
+
if !queryParameters.is_a? Hash
|
13
|
+
raise ValidationException, 'The "queryParameters" value is invalid.'
|
14
|
+
end
|
15
|
+
if !signature.is_a? String
|
16
|
+
raise ValidationException, 'The "signature" value is invalid.'
|
17
|
+
end
|
18
|
+
if !requestTimestamp.is_a? Integer
|
19
|
+
raise ValidationException, 'The "requestTimestamp" value is invalid.'
|
20
|
+
end
|
21
|
+
if !body.is_a? String
|
22
|
+
raise ValidationException, 'The "body" value is invalid.'
|
23
|
+
end
|
24
|
+
|
25
|
+
@queryParameters, @signature, @requestTimestamp, @body = queryParameters, signature, requestTimestamp, body
|
26
|
+
end
|
27
|
+
|
28
|
+
def verify(signingKey)
|
29
|
+
calculatedSignature = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), signingKey, buildPayload)
|
30
|
+
expectedSignature = Base64.decode64(@signature)
|
31
|
+
calculatedSignature.bytes == expectedSignature.bytes
|
32
|
+
end
|
33
|
+
|
34
|
+
def buildPayload
|
35
|
+
parts = []
|
36
|
+
parts.push(@requestTimestamp)
|
37
|
+
parts.push(URI.encode_www_form(@queryParameters.sort))
|
38
|
+
parts.push(Digest::SHA256.new.digest @body)
|
39
|
+
parts.join("\n")
|
40
|
+
end
|
41
|
+
|
42
|
+
def isRecent(offset = 10)
|
43
|
+
(Time.now.getutc.to_i - @requestTimestamp) < offset;
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
data/lib/messagebird/verify.rb
CHANGED
@@ -4,8 +4,8 @@ require 'messagebird/base'
|
|
4
4
|
|
5
5
|
module MessageBird
|
6
6
|
class Verify < MessageBird::Base
|
7
|
-
attr_accessor :id, :recipient, :reference, :status, :href
|
8
|
-
|
7
|
+
attr_accessor :id, :recipient, :reference, :status, :href
|
8
|
+
attr_reader :createdDatetime, :validUntilDatetime
|
9
9
|
|
10
10
|
def createdDatetime=(value)
|
11
11
|
@createdDatetime = value_to_time(value)
|
@@ -3,9 +3,8 @@ require 'messagebird/recipient'
|
|
3
3
|
|
4
4
|
module MessageBird
|
5
5
|
class VoiceMessage < MessageBird::Base
|
6
|
-
attr_accessor :id, :href, :originator, :body, :reference, :language, :voice, :repeat,
|
7
|
-
|
8
|
-
|
6
|
+
attr_accessor :id, :href, :originator, :body, :reference, :language, :voice, :repeat, :ifMachine
|
7
|
+
attr_reader :scheduledDatetime, :createdDatetime, :recipients
|
9
8
|
|
10
9
|
def scheduledDatetime=(value)
|
11
10
|
@scheduledDatetime = value_to_time(value)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: messagebird-rest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maurice Nonnekes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -38,6 +38,11 @@ files:
|
|
38
38
|
- lib/messagebird/client.rb
|
39
39
|
- lib/messagebird/contact.rb
|
40
40
|
- lib/messagebird/contact_reference.rb
|
41
|
+
- lib/messagebird/conversation.rb
|
42
|
+
- lib/messagebird/conversation_channel.rb
|
43
|
+
- lib/messagebird/conversation_client.rb
|
44
|
+
- lib/messagebird/conversation_message.rb
|
45
|
+
- lib/messagebird/conversation_webhook.rb
|
41
46
|
- lib/messagebird/custom_details.rb
|
42
47
|
- lib/messagebird/error.rb
|
43
48
|
- lib/messagebird/group.rb
|
@@ -49,6 +54,7 @@ files:
|
|
49
54
|
- lib/messagebird/message.rb
|
50
55
|
- lib/messagebird/message_reference.rb
|
51
56
|
- lib/messagebird/recipient.rb
|
57
|
+
- lib/messagebird/signed_request.rb
|
52
58
|
- lib/messagebird/verify.rb
|
53
59
|
- lib/messagebird/voicemessage.rb
|
54
60
|
homepage: https://github.com/messagebird/ruby-rest-api
|