messenger-ruby 1.1.7 → 1.2.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 +4 -4
- data/README.md +78 -3
- data/app/controllers/messenger/messenger_controller.rb +41 -1
- data/lib/messenger-ruby.rb +4 -0
- data/lib/messenger/components/element.rb +4 -0
- data/lib/messenger/components/elements/quick_reply.rb +24 -0
- data/lib/messenger/components/elements/sender_action.rb +15 -0
- data/lib/messenger/components/elements/video.rb +18 -0
- data/lib/messenger/components/templates/quick_replies.rb +18 -0
- data/lib/messenger/parameters/callback.rb +1 -1
- data/lib/messenger/parameters/entry.rb +1 -1
- data/lib/messenger/parameters/message.rb +7 -2
- data/lib/messenger/parameters/messaging.rb +1 -1
- data/lib/messenger/parameters/quick_reply.rb +11 -0
- data/lib/messenger/parameters/referral.rb +15 -0
- data/lib/messenger/params.rb +3 -1
- data/lib/messenger/request.rb +15 -4
- data/lib/messenger/version.rb +1 -1
- 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: f1e78c50c9e0bb2e4f5a874b2d5f9eac248fc280
|
4
|
+
data.tar.gz: 5b612f714540edcc18cbf4148d7769e3927f366e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05f2ba4823c440175a20eee95b5776a7a19a643c23cce0f483eade0d6a48ae256e07c4d9d4ecc15edd68f6305aa73dd74863b690c711193056a29e7e5db69e4b
|
7
|
+
data.tar.gz: f2b460829b2583a22eb7b9abeeb67bdb4f15bac9bf9c5c9aa561608a63895c4bb87395c45145437eb35ba3cd98d4830cdc273499391449d34d41fea047c3c9c5
|
data/README.md
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
# messenger-ruby
|
2
2
|
[](https://rubygems.org/gems/messenger-ruby)
|
3
3
|
[](https://circleci.com/gh/netguru/messenger-ruby)
|
4
|
-
[](https://codeclimate.com/repos/571f619474664d1dff007ae0/coverage)
|
4
|
+
[](https://codebeat.co/projects/github-com-netguru-messenger-ruby)
|
6
5
|
|
7
6
|
A simple library for supporting implementation of [Facebook Messenger Bot](https://developers.facebook.com/products/messenger/) in Ruby on Rails.
|
8
7
|
|
8
|
+
## Requirments
|
9
|
+
|
10
|
+
ruby 2.1+
|
11
|
+
|
9
12
|
## Installation
|
10
13
|
|
11
14
|
Add this line to your application's Gemfile:
|
@@ -143,6 +146,26 @@ Messenger::Elements::Bubble.new(title: 'First', subtitle: 'Bubble')
|
|
143
146
|
|
144
147
|
```
|
145
148
|
|
149
|
+
#### Quick Reply
|
150
|
+
|
151
|
+
Used by [Quick Replies](#quick-replies).
|
152
|
+
|
153
|
+
Attribute | Allowed values | Required?
|
154
|
+
--------- | -------------- | :--------:
|
155
|
+
content_type | 'text' or 'location' | ✔
|
156
|
+
title | String | only if content_type is 'text'
|
157
|
+
payload | String | only if content_type is 'text'
|
158
|
+
image_url | String | ✘
|
159
|
+
|
160
|
+
Example usage:
|
161
|
+
```ruby
|
162
|
+
Messenger::Elements::QuickReply.new(
|
163
|
+
content_type: 'text',
|
164
|
+
title: 'SomeTitle',
|
165
|
+
payload: "PAYLOAD"
|
166
|
+
)
|
167
|
+
```
|
168
|
+
|
146
169
|
#### Address
|
147
170
|
|
148
171
|
Used by [Receipt template](#receipt-template).
|
@@ -292,6 +315,57 @@ Messenger::Client.send(
|
|
292
315
|
...
|
293
316
|
```
|
294
317
|
|
318
|
+
#### Sender Actions
|
319
|
+
|
320
|
+
Attribute | Allowed values | Required?
|
321
|
+
--------- | -------------- | :--------:
|
322
|
+
sender_action | 'typing_on', 'typing_off' or 'mark_seen' | ✔
|
323
|
+
|
324
|
+
Sending send action:
|
325
|
+
```ruby
|
326
|
+
...
|
327
|
+
Messenger::Client.send(
|
328
|
+
Messenger::Request.new(
|
329
|
+
Messenger::Elements::SenderAction.new(sender_action: 'mark_seen'),
|
330
|
+
fb_params.first_entry.sender_id
|
331
|
+
)
|
332
|
+
)
|
333
|
+
...
|
334
|
+
```
|
335
|
+
|
336
|
+
#### Quick Replies
|
337
|
+
|
338
|
+
Attribute | Allowed values | Required?
|
339
|
+
--------- | -------------- | :--------:
|
340
|
+
text | String | attachment or text must be set
|
341
|
+
attachment | Attachment object | attachment or text must be set
|
342
|
+
quick_reply | Array of [Messenger::Elements::QuickReply](#quick_reply) objects| ✘
|
343
|
+
|
344
|
+
Example usage
|
345
|
+
```ruby
|
346
|
+
|
347
|
+
#define quick_replies here...
|
348
|
+
quick_replies = Messenger::Templates::QuickReplies.new(
|
349
|
+
text: "Green or Red?",
|
350
|
+
quick_replies: [
|
351
|
+
Messenger::Elements::QuickReply.new(
|
352
|
+
content_type: 'text',
|
353
|
+
title: 'Green',
|
354
|
+
payload: 'GREEN'
|
355
|
+
),
|
356
|
+
Messenger::Elements::QuickReply.new(
|
357
|
+
content_type: 'text',
|
358
|
+
title: 'Red',
|
359
|
+
payload: "RED"
|
360
|
+
)
|
361
|
+
]
|
362
|
+
)
|
363
|
+
|
364
|
+
#now send quick_replies to the user
|
365
|
+
Messenger::Client.send(
|
366
|
+
Messenger::Request.new(quick_replies, fb_params.first_entry.sender_id)
|
367
|
+
)
|
368
|
+
```
|
295
369
|
#### Generic template
|
296
370
|
|
297
371
|
Attribute | Allowed values | Required?
|
@@ -480,7 +554,8 @@ mid |
|
|
480
554
|
seq |
|
481
555
|
sticker_id |
|
482
556
|
text |
|
483
|
-
|
557
|
+
|
558
|
+
s | Array of [Messenger::Parameters::Attachment](#attachment) objects
|
484
559
|
is_echo |
|
485
560
|
app_id |
|
486
561
|
metadata |
|
@@ -39,7 +39,47 @@ module Messenger
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def fb_params
|
42
|
-
|
42
|
+
safe_params = params.permit(:object,
|
43
|
+
entry: [
|
44
|
+
:id,
|
45
|
+
:time,
|
46
|
+
messaging: [
|
47
|
+
{ sender: :id },
|
48
|
+
:timestamp,
|
49
|
+
{ recipient: :id },
|
50
|
+
message:
|
51
|
+
[
|
52
|
+
:mid,
|
53
|
+
:seq,
|
54
|
+
{ sticker: :id },
|
55
|
+
:text,
|
56
|
+
{ attachments: [
|
57
|
+
:type,
|
58
|
+
:url,
|
59
|
+
{ coordinates: :lat },
|
60
|
+
{ coordinates: :long }
|
61
|
+
] },
|
62
|
+
{ quick_reply: :payload },
|
63
|
+
:is_echo,
|
64
|
+
{ app: :id },
|
65
|
+
:metadata
|
66
|
+
],
|
67
|
+
read: [
|
68
|
+
:watermark,
|
69
|
+
:seq
|
70
|
+
],
|
71
|
+
postback: :payload,
|
72
|
+
optin: :ref,
|
73
|
+
delivery: [
|
74
|
+
{ mids: [] },
|
75
|
+
:watermark,
|
76
|
+
:seq
|
77
|
+
],
|
78
|
+
account_linking: [
|
79
|
+
:status, :authorization_code
|
80
|
+
]
|
81
|
+
]])
|
82
|
+
Params.new(safe_params)
|
43
83
|
end
|
44
84
|
end
|
45
85
|
end
|
data/lib/messenger-ruby.rb
CHANGED
@@ -26,8 +26,11 @@ require "messenger/components/elements/text"
|
|
26
26
|
require "messenger/components/elements/image"
|
27
27
|
require "messenger/components/elements/button"
|
28
28
|
require "messenger/components/elements/bubble"
|
29
|
+
require "messenger/components/elements/quick_reply"
|
30
|
+
require "messenger/components/elements/sender_action"
|
29
31
|
|
30
32
|
require "messenger/parameters/attachment"
|
33
|
+
require "messenger/parameters/quick_reply"
|
31
34
|
require "messenger/parameters/callback"
|
32
35
|
require "messenger/parameters/entry"
|
33
36
|
require "messenger/parameters/messaging"
|
@@ -48,6 +51,7 @@ require "messenger/components/elements/receipt/summary"
|
|
48
51
|
require "messenger/components/templates/buttons"
|
49
52
|
require "messenger/components/templates/generic"
|
50
53
|
require "messenger/components/templates/receipt"
|
54
|
+
require "messenger/components/templates/quick_replies"
|
51
55
|
|
52
56
|
require "messenger/client"
|
53
57
|
require "messenger/request"
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'messenger/components/element'
|
2
|
+
|
3
|
+
module Messenger
|
4
|
+
module Elements
|
5
|
+
class QuickReply
|
6
|
+
include Components::Element
|
7
|
+
|
8
|
+
attr_accessor :content_type, :title, :payload, :image_url
|
9
|
+
|
10
|
+
def initialize(content_type:, title: nil, payload: nil, image_url: nil)
|
11
|
+
@content_type = content_type
|
12
|
+
@title = title if text?(content_type)
|
13
|
+
@payload = payload if text?(content_type)
|
14
|
+
@image_url = image_url
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def text?(value)
|
20
|
+
value == 'text'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'messenger/components/attachment'
|
2
|
+
|
3
|
+
module Messenger
|
4
|
+
module Elements
|
5
|
+
class Video
|
6
|
+
include Components::Attachment
|
7
|
+
|
8
|
+
attr_accessor :url
|
9
|
+
|
10
|
+
ATTRIBUTES = %w(url).freeze
|
11
|
+
|
12
|
+
def initialize(url:)
|
13
|
+
@url = url
|
14
|
+
@type = 'video'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'messenger/components/attachment'
|
2
|
+
|
3
|
+
module Messenger
|
4
|
+
module Templates
|
5
|
+
class QuickReplies
|
6
|
+
include Components::Element
|
7
|
+
|
8
|
+
attr_accessor :text, :quick_replies
|
9
|
+
|
10
|
+
ATTRIBUTES = %w(text quick_replies).freeze
|
11
|
+
|
12
|
+
def initialize(text:, quick_replies:)
|
13
|
+
@text = text
|
14
|
+
@quick_replies = build_elements(quick_replies)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Messenger
|
2
2
|
module Parameters
|
3
3
|
module Callback
|
4
|
-
%w(message delivery optin postback read account_linking).each do |method|
|
4
|
+
%w(message delivery optin postback read account_linking referral).each do |method|
|
5
5
|
define_method("#{method}?") do
|
6
6
|
type.include?(method)
|
7
7
|
end
|
@@ -5,19 +5,24 @@ module Messenger
|
|
5
5
|
|
6
6
|
attr_accessor :mid, :seq, :sticker_id, :text, :attachments, :is_echo, :app_id, :metadata
|
7
7
|
|
8
|
-
def initialize(mid:, seq:, sticker_id: nil, text: nil, attachments: nil, is_echo: nil, app_id: nil, metadata: nil)
|
8
|
+
def initialize(mid:, seq:, sticker_id: nil, text: nil, attachments: nil, quick_reply: nil, is_echo: nil, app_id: nil, metadata: nil)
|
9
9
|
@mid = mid
|
10
10
|
@seq = seq
|
11
11
|
@sticker_id = sticker_id if sticker_id.present?
|
12
12
|
@text = text if text.present?
|
13
13
|
@attachments = build_attachments(attachments) if attachments.present?
|
14
|
+
@quick_reply = build_quick_reply(quick_reply) if quick_reply.present?
|
14
15
|
@is_echo = is_echo
|
15
16
|
@app_id = app_id
|
16
17
|
@metadata = metadata
|
17
18
|
end
|
18
19
|
|
19
20
|
def build_attachments(attachments)
|
20
|
-
attachments.map { |attachment| Attachment.new(attachment.
|
21
|
+
attachments.map { |attachment| Attachment.new(attachment.transform_keys(&:to_sym).slice(:type, :payload)) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def build_quick_reply(quick_reply)
|
25
|
+
QuickReply.new(quick_reply.transform_keys(&:to_sym))
|
21
26
|
end
|
22
27
|
end
|
23
28
|
end
|
@@ -11,7 +11,7 @@ module Messenger
|
|
11
11
|
|
12
12
|
def set_callback(callbacks)
|
13
13
|
type = callbacks.select { |_, v| v.present? }.keys.first
|
14
|
-
@callback = constant(type).new(callbacks[type].
|
14
|
+
@callback = constant(type).new(callbacks[type].transform_keys(&:to_sym))
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
data/lib/messenger/params.rb
CHANGED
@@ -14,10 +14,12 @@ module Messenger
|
|
14
14
|
entries[0].messagings[0]
|
15
15
|
end
|
16
16
|
|
17
|
+
alias_method :first_messaging, :first_entry
|
18
|
+
|
17
19
|
private
|
18
20
|
|
19
21
|
def build_entries
|
20
|
-
params['entry'].map { |entry| Parameters::Entry.new(entry.
|
22
|
+
params['entry'].map { |entry| Parameters::Entry.new(entry.to_h.transform_keys(&:to_sym)) }
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
data/lib/messenger/request.rb
CHANGED
@@ -3,7 +3,7 @@ module Messenger
|
|
3
3
|
def initialize(component, recipient_id)
|
4
4
|
@recipient_id = recipient_id
|
5
5
|
@body = body
|
6
|
-
|
6
|
+
create_request(component)
|
7
7
|
end
|
8
8
|
|
9
9
|
def build
|
@@ -11,14 +11,25 @@ module Messenger
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def add_element(element)
|
14
|
-
@body
|
14
|
+
@body.merge!({ message: element.build })
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_sender_action(action)
|
18
|
+
@body.merge!(action.build)
|
15
19
|
end
|
16
20
|
|
17
21
|
def body
|
18
22
|
{
|
19
|
-
recipient: { id: @recipient_id }
|
20
|
-
message: {}
|
23
|
+
recipient: { id: @recipient_id }
|
21
24
|
}
|
22
25
|
end
|
26
|
+
|
27
|
+
def create_request(component)
|
28
|
+
if component.is_a? Elements::SenderAction
|
29
|
+
add_sender_action(component)
|
30
|
+
else
|
31
|
+
add_element(component)
|
32
|
+
end
|
33
|
+
end
|
23
34
|
end
|
24
35
|
end
|
data/lib/messenger/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: messenger-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- justynjozwiak
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-12-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -163,14 +163,18 @@ files:
|
|
163
163
|
- lib/messenger/components/elements/bubble.rb
|
164
164
|
- lib/messenger/components/elements/button.rb
|
165
165
|
- lib/messenger/components/elements/image.rb
|
166
|
+
- lib/messenger/components/elements/quick_reply.rb
|
166
167
|
- lib/messenger/components/elements/receipt/address.rb
|
167
168
|
- lib/messenger/components/elements/receipt/adjustment.rb
|
168
169
|
- lib/messenger/components/elements/receipt/item.rb
|
169
170
|
- lib/messenger/components/elements/receipt/order.rb
|
170
171
|
- lib/messenger/components/elements/receipt/summary.rb
|
172
|
+
- lib/messenger/components/elements/sender_action.rb
|
171
173
|
- lib/messenger/components/elements/text.rb
|
174
|
+
- lib/messenger/components/elements/video.rb
|
172
175
|
- lib/messenger/components/templates/buttons.rb
|
173
176
|
- lib/messenger/components/templates/generic.rb
|
177
|
+
- lib/messenger/components/templates/quick_replies.rb
|
174
178
|
- lib/messenger/components/templates/receipt.rb
|
175
179
|
- lib/messenger/configuration.rb
|
176
180
|
- lib/messenger/engine.rb
|
@@ -183,7 +187,9 @@ files:
|
|
183
187
|
- lib/messenger/parameters/messaging.rb
|
184
188
|
- lib/messenger/parameters/optin.rb
|
185
189
|
- lib/messenger/parameters/postback.rb
|
190
|
+
- lib/messenger/parameters/quick_reply.rb
|
186
191
|
- lib/messenger/parameters/read.rb
|
192
|
+
- lib/messenger/parameters/referral.rb
|
187
193
|
- lib/messenger/params.rb
|
188
194
|
- lib/messenger/request.rb
|
189
195
|
- lib/messenger/version.rb
|